定义指向结构体变量的指针变量和定义结构体变量的方法基本相同,唯一的区别是在指针变量名的前面加一个指针标记“*”。可以将结构体和指针变量分开来定义,也可以同时定义结构体和对应的指针变量,使用后一种方法还可以省略结构体的名称。
当一个结构体变量的地址已赋给相同结构体的指针变量(即指针变量指向变量),就可以使用下列两种方式来引用该结构体变量的成员,其作用完全相同。
方式1:(*指针变量).成员名
方式2:指针变量→成员名
方式1比较好理解,其中“*指针变量”就代表了它所指向的结构体变量,利用“成员运算符”来引用,其作用相当于“结构体变量.成员名”。需要注意的是,“*指针变量”必须用圆括号括住,因为“*”运算符的级别低于“.”运算符的级别,如果不加括号,则优先处理“.”运算符,将出现“指针变量.成员名”,会造成语法错误。
方式2是一种新的引用方法,其中的“→”称为“指向成员运算符”,也简称为“指向运算符”。其运算级别和“()”“[ ]”“.”是同级的。指向运算符的左边必须是已指向某个结构体变量或数组元素的指针变量,其右边必须是对应结构体数据的成员名。
【例10.5】使用指向结构体变量的指针变量。(www.xing528.com)
本例程序定义了一个结构stu,定义了stu类型结构变量boy1 并作了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1。然后在printf语句内用三种形式输出boy1的各个成员值。从运行结果可以看出:
这三种用于表示结构成员的形式是完全等效的。
要特别注意指向结构体数据的指针变量和指向结构体数据成员的指针变量的区别。前者的数据类型是某种结构体,它只能指向该结构体的变量或数组;而指向结构体数据成员的指针变量的数据类型要和所指向的成员的数据类型相同。一般情况下,指向结构体数据的指针变量和指向结构体数据的成员的指针变量是不能混用的。
C语言规定,定义某个结构体时,其成员的类型可以是该结构体,但是这个成员只能是指针变量或指针数组,不能是普通变量或数组。
例如,下列程序段是正确的,其成员是结构体的指针变量:
而下列程序段是错误的,其成员是结构体的变量:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。