注册 登录
编程论坛 C++教室

结构体与共用体的问题!请解释一下为什么以下输出的结果是2,3 而不是1,2

雪色朝阳 发布于 2010-03-26 19:43, 671 次点击
#include<stdio.h>
union ks
{int a;
int b;
};
union ks s[4];
union ks *p;
main()
{int n=1,i;
printf("\n");
for(i=0;i<4;i++)
{s[i].a=n;
s[i].b=s[i].a+1;
n=n+2;
}
p=&s[1];
printf("%d,",p->a);
printf("%d",++p->a);
}
4 回复
#2
gyx88992010-03-26 20:21
以下是引用雪色朝阳在2010-3-26 19:43:07的发言:

#include<stdio.h>
union ks
{int a;
int b;
};
union ks s[4];
union ks *p;
main()
{int n=1,i;
printf("\n");
for(i=0;i<4;i++)
{s.a=n;
s.b=s.a+1;
n=n+2;
}
p=&s[1];
printf("%d,",p->a);
printf("%d",++p->a); ...
结果是4,5啊。
printf("%d",++p->a); 是p->a+1的意思。等价于printf("%d",++(p->a));
s[0]->a=s[0]->b=2;
s[1]->a=s[1]->b=4;
s[2]->a=s[2]->b=6;
s[3]->a=s[3]->b=8;
#3
apull2010-03-26 22:21
楼上正解,4,5
union里的元素使用同一个内存空间。
所以先给a赋值,然后在给b赋值,会覆盖掉a的值。
#4
雪色朝阳2010-03-26 22:33
哦,明白了!给。。。。。。分。。。。。。
#5
wei00002010-03-26 22:37
2楼对啊
1