printf("%d,",p->y);printf("%d\n",(++p)->x);}我知道运行结果是:10,2 哪位高手帮忙解决一下下面几个问题:1.数组data的空间大小为3,怎么放了四个数? 2.我知道*p=data 中data的首地址赋给p,那么p->y 怎么会指向第二个元素?
这个代码虽然可以执行,但是很不严谨感觉你是初学者,如果毕业以后打算从事编程行业,最好选择严谨一点的教材至于你的问题,回答如下第一个问题,数组data的元素个数是2,申请的内存空间是4个int为什么能存放4个数呢?是因为data是自定义类型struct st的数组而每一个struct st的实例占用2个int的内存空间所以data就是data[0].x; data[0].y; data[1].x; data[1].y;第二个问题,如果第一个问题看明白了,第二个问题就好解释了p->y为什么指向第二个元素,它指向的是第一个元素的第二个成员变量也就是说p->y访问的是data[0].y至于你为什么会有错误的理解,是因为错误的理解了数组的定义数组事实上是一个常量指针,指向一个连续的内存空间上面的话你多半比我熟悉,不过你把一维数组想象成二维数组了不过我感觉你还是不懂,因为我不是很擅长教别人,所以你可以考虑一下Int data[2]; 和 int* data[2]; 这两个数组有什么不同
1.数组data的空间大小为3 ? 你怎么知道的? struct st {int x,y;} data[2]={1,10,2,20}; 准确的写法应该是: struct st {int x,y;} data[2]={{1,10},{2,20}}; //数组data有两个元素,每个元素都是一个结构体数据2.我知道*p=data 中data的首地址赋给p,那么p->y 怎么会指向第二个元素? p是一个结构体指针,结构体由两个变量组成,p->y是指当前结构体中的y元素的值。++p ,使得p指向第二个元素(第二个结构体数据),p->x是指当前结构体中的X元素的值。