回覆列表
  • 1 # 何以笙丶丶

    指向結構變數的指標

    一個指標變數當用來指向一個結構變數時,稱之為結構指標變數。結構指標變數中的值是所指向的結構變數的首地址。透過結構指標即可訪問該結構變數,這與陣列指標和函式指標的情況是相同的。

    結構指標變數說明的一般形式為:

    struct 結構名 *結構指標變數名

    例如,在前面的例題中定義了stu這個結構,如要說明一個指向stu的指標變數pstu,可寫為:

    struct 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的各個成員值。從執行結果可以看出:

    結構變數.成員名

    (*結構指標變數).成員名

    結構指標變數->成員名

    這三種用於表示結構成員的形式是完全等效的。

  • 中秋節和大豐收的關聯?
  • 請以“本來我可以______”為題,寫一篇600字以上的文章?