数组、结构、指针混用实例及疑难解决过程


#include <stdio.h>

#define MAX 4

//定义part结构
struct part{
 short member;
 char name[10];
}data[MAX] = {1,"smith",
     2,"jones",
     3,"adans",
     4,"wilson"
   };

//定义指向结构的指针
struct part *pPart;

int main(void)
{
 int count;
//给结构指针赋值,把数组的第一个元素的地址赋给结构指针
 pPart = data;
 for(count = 0; count < MAX; count++)
 {
    //显示指针指向的地址,指针指向结构的成员
  printf("At Address %d : %d %s/n",pPart,pPart->member,pPart->name);

   /* pPart++等价于pPart = pPart + sizeof(结构),因为这里指针指向的是结构,此时pPart++指向data[1]
   count = 1时pPart++指向的是data[2],count = 2时pPart++指向的是data[3],count = 3时pPart++指向的 
   是data[3] */

  pPart++;
 }
 return 0;
}

用VC6.0编译后,在我的机器上,运行结果为:
At Address 4336176 : 1 smith
At Address 4336188 : 2 jones
At Address 4336200 : 3 adans
At Address 4336212 : 4 wilson

    我给这段代码加了下注释,请各位看看有没有理解不对的地方。
    另外,有一处我不理解,就是这个data[MAX]初始化不明白,MAX为4,也就是说,data[0]、data[1]、data[2]、data[3]都是结构,那怎么初始化的时候是这样:
    {1,"smith", 
     2,"jones",
     3,"adans",
     4,"wilson"
   };
这样是data[0]、data[1]、data[2]、data[3]初始化都是这些值,还是什么?
这个结构:
struct part{
 short member;
 char name[10];
}
不是只有两个成员吗?

问题已经解决,解决过程如下:
*******************************************************************
foochow(恰似你的温柔)
数组在内存中连续分配空间的
{1,"smith",
     2,"jones",
     3,"adans",
     4,"wilson"
   };
这个就是给结构data[0]、data[1]、data[2]、data[3]初始化

*******************************************************************
 kgdiwss(∮明天去要饭)
你的意思是:
data[MAX] = {1,"smith",
     2,"jones",
     3,"adans",
     4,"wilson"
   };

等价于:

data[0] = {1,"smith"};
data[1] = {2,"jones"};
data[2] = {3,"adans"};
data[3] = {4,"wilson"};

*******************************************************************
 foochow(恰似你的温柔)
对,因为数组空间是连续的所以可以连续赋值

*******************************************************************
 
megaboy(此人已注销)
不过这种编程风格不可取,还是用{}分开来程序更清晰:
struct part{
 short member;
 char name[10];
}data[MAX] = {
     {1,"smith"},
     {2,"jones"},
     {3,"adans"},
     {4,"wilson"}
   };
*******************************************************************

感谢两位朋友的帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值