指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址。
设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。这与普通数组的情况是一致的。
【例11.6】用指针变量输出结构数组。
structstu
{ intnum;
char*name;
charsex;
floatscore;
}boy[5]={
{101,"Zhouping",'M',45},
{102,"Zhangping",'M',62.5},
{103,"Lioufang",'F',92.5},
{104,"Chengling",'F',87},
{105,"Wangming",'M',58},
};
main()
{structstu*ps;
printf("No\t Name\t\t\t Sex\t Score\t\n");
for(ps=boy;ps<boy+5;ps++)
printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);
}
在程序中定义了stu结构类型的外部数组boy并做了初始化赋值。在main函数内定义ps为指向stu类型的指针。在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy数组中各成员值。
应该注意的是,一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,但是不能使它指向一个成员。也就是说,不允许取一个成员的地址来赋予它。因此下面的赋值是错误的:
ps=&boy[1].sex;
而只能是
ps=boy;(赋予数组首地址)
或者是
ps=&boy[0];(赋予0号元素首地址)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。