利用結構體指針變量引用結構體成員有以下兩種方式可以實現:
(1)利用指針運算符“*”先得到所指對象,再使用分量運算符“.”實現:
(*結構體指針變量名).成員名
如:(*p1).name
(*p1).age
(2)用指向運算符“->”直接引用所指向結構體變量的成員:
結構體指針變量名->成員
如:p1->name等價於(*p1).name
p1->age等價於(*p1).age
結構體指針變量定義後可以用來指向一個結構體變量,也可以用來指向結構體數組及其元素。
如:structstud
{
char*name;
intscore;
}*p,s[5];
p=s;
以上程序段定義了一個stud類型的結構體數組s和指向該結構體類型的指針變量p,並將數組s的首地址賦給指針變量p,此時p指向第一個數組元素s[0],若要引用該元素中的score成員,則可以用p->score,也可以用(*p).score。此外,也可以將數組中某個元素的地址賦給p,如p=&s[1]。
至此,我們已經學了以下三種引用結構體變量成員的方法:
結構體變量名.成員名
結構體指針變量名->成員名
(*結構體指針變量名).成員名
[例113]用指針變量輸出結構體數組。
structstud
{
intnum;
charname[15];
intscore;
}s[5]={
{2011,"Zhouping",75},
{2012,"Zhangping",62},
{2013,"Lioufang",92},
{2014,"Chengling",87},
{2015,"Wangming",85}
};
voidmain()
{
structstud*p;
printf("No\tName\tScore\n");
for(p=s;p
num,p->name,p->score);
}
在本程序中定義了一個外部結構體數組s,其每個數組元素都是結構體類型stud。在main函數中定義了一個指向stud結構體類型的指針變量p。在for循環語句的表達式1中,令p的初值為結構體數組s的首地址,然後通過循環輸出s數組中的各個成員值。
用結構體變量作函數實參有如下三種形式:
(1)將結構體變量的成員作函數參數;
(2)用結構體變量作函數參數;
(3)用指向結構體變量的指針作函數參數。
用結構體變量作函數參數進行整體傳送時需要將全部成員逐個傳送,而且當成員為數組時,數據傳送的時間和空間開銷非常大。因此,當要傳送整個結構體變量時,最好的辦法就是使用指針變量作函數參數,這樣由實參傳向形參的隻是結構體變量的地址,從而可以大大減少運行時間,提高程序運行效率。
[例114]用結構體指針變量作函數參數。
#include
structstu
{charnum[10];
charname[15];
};
voidprint(structstu*pt)
{
printf("num:%s,name:%s",pt->num,pt->name);