5.4 指向结构的指针
在程序中,常常需要为结构动态分配内存,这需要指向结构类型变量的指针。对指向结构变量的指针来说,其使用方法与指向其他类型如int和double等的指针类似。一个指针变量当用来指向一个结构变量时,便称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针便可访问该结构变量。由于共用体可以看成一种特殊的结构,指向共用体的指针与指向结构的指针使用方法一致,因此,本节中将指向共用体的指针与指向结构的指针统称为结构指针。
5.4.1 声明一个结构指针
和普通指针类似,可采用下列形式声明一个结构指针。
结构名*指针变量名;
以代码5.1中定义的的student结构为例,“student*p”声明了一个指向结构student的指针p,给指针变量p赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。
注意
和普通指针的使用方法一致,可以将“结构名*”看成一种符合类型。
student stu1; student*p=&stu1;
上述语句声明了一个student型的结构变量stu1和一个指向student型的结构指针p,并用stu1的首地址对p赋值。
如果要访问stu1中的成员变量name,可使用下列表达式。
(*p).name;
注意
运算符""的优先级低于运算符"."的优先级,所以要对p加括号,才能使上式等价于“stu1.name;”。
结构指针和普通的指针占用相同个数的内存单元,其中存储的仍旧是某个内存单元(结构变量首字节)的地址。