为什么是3

来源:百度知道 编辑:UC知道 时间:2024/06/03 06:02:45
#include<stdio.h>
void main()
{
int x=1,y=3,z=3;
struct aa {int a;int *p;} s[]={4,&x,5,&y,6,&z};
struct aa *q=s+1;
printf("%d\n",*(q->p)++);
}

输出结果3怎么来的?
struct aa {int a;int *p;} s[]={4,&x,5,&y,6,&z};
只有int a;int *p;2个形参 s初始化里怎么会有6个???

这个题出的很有意思,首先说一下S[].S[]是一个定义为aa类型的数组,里面包含了4,&x,5,&y,6,&z这几个aa类型的数组对象.并不是楼主所理解的类型初始化,而是S数组初始化.每个数组对象都含有int a,int *p这两个参数.类同 char *a[]这种定义.如果这个理解了下面的就好解决了.我们来看下struct aa *q=s+1,这句话说明饿指针 q指向s[1].S[1]中存储的数组对象为&x.其包含两个参数int a,int *p;那么*(q->p)可理解为&(s[1].p).这个地址增加一个长度恰恰是&y,所以得到的结果为3.应该是Y的值.或有不妥,仅供参考.