#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 smithAt Address 4336188 : 2 jonesAt Address 4336200 : 3 adansAt 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"} };*******************************************************************感谢两位朋友的帮助。本文引用通告地址: http://blog.csdn.net/kgdiwss/services/trackbacks/418967.aspx
|