C語言結構體指針詳解
一.前言
一個指向結構體的變量的指針表示的是這個結構體變量占內存中的起始位置,同樣它也可以指向結構體變量數組。
*a).b 等價於 a->b。
"."一般情況下讀作"的”,結構體a的b。
“->”一般讀作"指向的結構體的",a指向的結構體的b。
二.實例
#include<stdlib.h> #include<stdio.h> #include <string.h> int main(){ struct{ char *name; //姓名 int num; //學號 int age; //年齡 char group; //所在小組 float score; //成績 } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1; //讀取結構體成員的值 printf("%s的學號是%d,年齡是%d,在%c組,今年的成績是%.1f!\n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score); printf("%s的學號是%d,年齡是%d,在%c組,今年的成績是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score); return 0; }
三.typedef struct與struct定義結構體的區別
typedef是類型定義的意思。typedef struct 是為了使用這個結構體方便。 具體區別在於: (1)若struct node {}這樣來定義結構體的話。在申請node 的變量時,需要這樣寫,struct node n; (2)若用typedef,可以這樣寫,typedef struct node{}NODE; 。在申請變量時就可以這樣寫,NODE n; 區別就在於使用時,是否可以省去struct這個關鍵字。
struct 結構名
{
類型 變量名;
類型 變量名;
...
} 結構變量;
typedef struct 結構名
{
類型 變量名;
類型 變量名;
...
} 結構別名;