指向結構變量的指針 一個指針變量當用來指向一個結構變量時,稱之爲結構指針變量。結構指針變量中的值是所指向的結構變量的首地址。通過結構指針即可訪問該結構變量,這與數組指針和函數指針的情況是相同的。 結構指針變量說明的一般形式爲: struct 結構名 *結構指針變量名 例如,在前面的例題中定義了stu這個結構,如要說明一個指向stu的指針變量pstu,可寫爲: struct stu *pstu; 當然也可在定義stu結構時同時說明pstu。與前面討論的各類指針變量相同,結構指針變量也必須要先賦值後才能使用。 賦值是把結構變量的首地址賦予該指針變量,不能把結構名賦予該指針變量。如果boy是被說明爲stu類型的結構變量,則: pstu=&boy 是正確的,而: pstu=&stu 是錯誤的。 結構名和結構變量是兩個不同的概念,不能混淆。結構名只能表示一個結構形式,編譯系統並不對它分配內存空間。只有當某變量被說明爲這種類型的結構時,纔對該變量分配存儲空間。因此上面&stu這種寫法是錯誤的,不可能去取一個結構名的首地址。有了結構指針變量,就能更方便地訪問結構變量的各個成員。 其訪問的一般形式爲: (*結構指針變量).成員名 或爲: 結構指針變量->成員名 例如: (*pstu).num 或者: pstu->num 應該注意(*pstu)兩側的括號不可少,因爲成員符“.”的優先級高於“*”。如去掉括號寫作*pstu.num則等效於*(pstu.num),這樣,意義就完全不對了。 下面通過例子來說明結構指針變量的具體說明和使用方法。 【例】 struct stu { int num; char *name; char sex; float score; } boy1={102,"Zhang ping",'M',78.5},*pstu; main() { pstu=&boy1; printf("Number=%d\nName=%s\n",boy1.num,boy1.name); printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score); printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name); printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score); printf("Number=%d\nName=%s\n",pstu->num,pstu->name); printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score); } 本例程序定義了一個結構stu,定義了stu類型結構變量boy1並作了初始化賦值,還定義了一個指向stu類型結構的指針變量pstu。在main函數中,pstu被賦予boy1的地址,因此pstu指向boy1。然後在printf語句內用三種形式輸出boy1的各個成員值。從運行結果可以看出: 結構變量.成員名 (*結構指針變量).成員名 結構指針變量->成員名 這三種用於表示結構成員的形式是完全等效的。
來源:http://zhidao.baidu.com/question/93011133.html