#include <stdio.h> struct st {int x,y;}data[2]={1,10,2,20}; main() {struct st *p

printf("%d,",p->y);printf("%d\n",(++p)->x);
}
我知道运行结果是:10,2 哪位高手帮忙解决一下下面几个问题:1.数组data的空间大小为3,怎么放了四个数? 2.我知道*p=data 中data的首地址赋给p,那么p->y 怎么会指向第二个元素?
最新回答
晚春里

2024-05-02 20:13:50

这个代码虽然可以执行,但是很不严谨
感觉你是初学者,如果毕业以后打算从事编程行业,最好选择严谨一点的教材
至于你的问题,回答如下

第一个问题,数组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]; 这两个数组有什么不同
陌生的挚爱

2024-05-02 23:13:22

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元素的值。