指向結構變量的指針

指向結構變量的指針
一個指針變量當用來指向一個結構變量時,稱之爲結構指針變量。結構指針變量中的值是所指向的結構變量的首地址。通過結構指針即可訪問該結構變量,這與數組指針和函數指針的情況是相同的。
結構指針變量說明的一般形式爲:
    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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章