#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];
}
不是只有两个成员吗?
问题已经解决,解决过程如下:
*******************************************************************
数组在内存中连续分配空间的
{1,"smith",
2,"jones",
3,"adans",
4,"wilson"
};
这个就是给结构data[0]、data[1]、data[2]、data[3]初始化
*******************************************************************
你的意思是:
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"};
*******************************************************************
对,因为数组空间是连续的所以可以连续赋值
*******************************************************************
不过这种编程风格不可取,还是用{}分开来程序更清晰:
struct part{
short member;
char name[10];
}data[MAX] = {
{1,"smith"},
{2,"jones"},
{3,"adans"},
{4,"wilson"}
};
*******************************************************************
感谢两位朋友的帮助。