C语言中结构体struct类型的用法(二)
结构体指针的用法
所谓的结构体指针就是指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。如果把一个结构体变量的起始地址存在在一个指针变量中,那个这个指针变量就指向该结构体变量。
1.1 指向结构体变量的指针
指向结构体对象的指针变量既可指向结构体变量,也可指向结构体数组中的元素。指针变量的基类型必须与结构体变量的类型相同。
struct Student * pt;//pt可以指向struct Student类型的变量或数组元素
struct Student stu_1;
struct Student * p;
p=&stu_1;
stu_1.num=1001;
strcpy(stu_1.name, "LiLin");
printf("NO.:%d\n", (*p).num);
为了使用方便和直观,C语言允许把(*p).num用p->num来代替。
如果p指向一个结构体变量stu,以下3种用法等价:
1.stu.num
2.(*p).num
3.p->num
1.2 指向结构体数组的指针
struct Student * p;
for(p=stu;p<stu+3;p++)
printf("%5d %-20s %2c %4d\n", p->num,p->name, p->sex, p->age);
1.如果p的初值为stu,即指向stu的第一个元素,p加1后,p就指向下一个元素,例如:
(++p)->num //先使p+1
(p++)->num //先求得p->num,然后p+1
2.程序定义了p是一个指向struct Student类型对象的指针变量,它用来指向一个struct Student类型的对象,不应用来指向stu数组元素中的某一个成员,例如,下面的用法是不对的;
p=stu[1].name;
如果要将某一成员的地址赋给p,可以使用强制类型转换,先将成员的地址转换成p的类型,例如:
p=(struct Student *)stu[0].name;
浙公网安备 33010602011771号