2.10.3 指向结构体的指针
当一个指针用来指向一个结构体变量时,称之为结构体指针变量。结构体指针变量中的值是所指向的结构变量的首地址,通过结构指针即可访问该结构变量。这与数组指针和函数指针的情况是相同的。结构体指针变量定义的一般形式为:
- struct 结构类型名 *结构指针变量名
例如,我们在2.12.1节中定义了struct address结构类型,如要定义一个指向该结构类型的指针变量pstu,可写为:
- struct address *pstu;
当然也可在定义struct address结构类型时同时说明pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后使用。
赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。如果student1是被说明为struct address类型的结构变量,则:
- pstu = &student1;
就是对结构指针进行赋值。有了结构指针变量,就能更方便地访问结构变量的各个成员。其访问的一般形式为:
- (*结构指针变量).成员名
或者:
- 结构指针变量->成员名
例如:
- (*pstu).name
或者:
- pstu->name
都是对student1 结构体的name成员的访问。
注意
(*pstu)两侧的括号不可少,因为成员符"."的优先级高于"*",如去掉括号写做*pstu.num则等效于*(pstu.num),这样,意义就完全不对了。
通过总结,不难发现,我们可以使用以下3 种方式访问结构体中的成员:一是结构变量.成员名;二是(*结构指针变量).成员名;三是结构指针变量->成员名。这3种用于表示结构成员的形式是完全等效的。