13.5.3 用指针处理结构数组
《C语言开发技术详解》第13章结构、联合和枚举,在C语言中,数据类型可分为基本数据类型和构造数据类型。构造类型中的数组已在第9章中介绍了。本章将介绍另外两种构造类型:结构、联合。本节为大家介绍用指针处理结构数组。
AD:
13.5.3 用指针处理结构数组
结构指针可以指向结构变量,当然也可以指向结构数组。与指针指向其他类型的数组一样,用指针可以方便地遍历结构数组中的每一个数组元素。
可以将结构数组的第1个元素的地址赋值给结构指针变量,因为数组名表示数组的首地址,因此,也可将数组名赋值给结构指针变量。例如,在程序中,有以下代码:
struct minneed needs[N]; struct minned *pneed;则可以使用以下代码将结构数组的首地址保存到结构指针变量pneed中:
pneed=needs;以下形式与此等价:
pneed=&needs[0];当结构指针变量pneed指向结构数组后,就可使用该指针变量处理结构数组中的一个元素,如果要访问结构数组中的下一个元素,可使指针变量pneed自增1即可,即:
pneed++;与指向其他数据类型的指针相同,当指针自增1时,相当于执行以下语句:
pneed=pneed+sizeof(minneed);即指针变量将指向下一个结构的起始位置,如图13-8所示。
(点击查看大图)图13-8 结构指针自增运算 下面的程序通过结构指针遍历结构数组,将结构数组中各元素的值输出到屏幕上。
【程序13-5】用指针处理结构数组示例
1: #include 2: #define N 4 3: 4: struct minneed 5: { 6: char *name; 7: char sex; 8: unsigned short age; 9: float amount; 10: }; 11: 12: int main() 13: { 14: struct minneed needs[N]= 15: {{"zhangjun",1,55,150.0}, 16: {"wumei",0,48,130.0}, 17: {"duli",0,55,180.0}, 18: {"liping",1,56,150.0} 19: }; 20: struct minneed *pneed; 21: pneed=needs; 22: int i; 23: 24: for(i=1;i以上程序的第4~10行为定义结构类型,第14~19行初始化结构数组,与前面的程序相同。
第20行定义一个类型为struct minneed的结构指针变量。
第21行将结构数组的首地址保存到结构指针变量pneed中。
第24~31行通过一个循环,逐个输出结构数组中每个元素的值。在26~29行的printf函数中,使用结构指针变量pneed访问结构数组元素中各成员的值。当输出完一个元素中各成员的值后,执行第30行中的指针变量自增操作,使结构指针变量pneed指向下一个数组元素。这样循环操作,即可将数组中各元素的值都输出。最后,结构指针变量将指向结构数组之外(后面)的一个地址。