13.5.3 用指针处理结构数组

13.5.3 用指针处理结构数组 - 51CTO.COM

13.5.3 用指针处理结构数组

2009-06-04 14:32 戴建华 电子工业出版社 我要评论(0) 字号: T | T

综合评级: 

想读(0)   在读(1)   已读(4)    品书斋鉴(0)    已有5人发表书评

一键收藏,随时查看,分享好友!

《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指向下一个数组元素。这样循环操作,即可将数组中各元素的值都输出。最后,结构指针变量将指向结构数组之外(后面)的一个地址。

posted on 2012-07-06 09:21  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2012/07/06/2578862.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值