正文 第41章 結構體與共用體3(1 / 2)

利用結構體指針變量引用結構體成員有以下兩種方式可以實現:

(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]。

至此,我們已經學了以下三種引用結構體變量成員的方法:

結構體變量名.成員名

結構體指針變量名->成員名

(*結構體指針變量名).成員名

[例113]用指針變量輸出結構體數組。

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)用指向結構體變量的指針作函數參數。

用結構體變量作函數參數進行整體傳送時需要將全部成員逐個傳送,而且當成員為數組時,數據傳送的時間和空間開銷非常大。因此,當要傳送整個結構體變量時,最好的辦法就是使用指針變量作函數參數,這樣由實參傳向形參的隻是結構體變量的地址,從而可以大大減少運行時間,提高程序運行效率。

[例114]用結構體指針變量作函數參數。

#include

structstu

{charnum[10];

charname[15];

};

voidprint(structstu*pt)

printf("num:%s,name:%s",pt->num,pt->name);