求教一个union的问题

icebreaker2008 2010-11-11 10:49:39
请问各位为什么下面ex.i输出为266
#include <stdio.h>

union {
int i;
char a[2];
} ex;

void main()
{
ex.a[0] = 10;
ex.a[1] = 1;
printf("i = %d\n", ex.i);
}
...全文
69 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
icebreaker2008 2010-11-11
  • 打赏
  • 举报
回复
看了楼上几位讲的,自己忽然明白了 联合是引用内存中相同的位置,当时考试的时候没有意识到这个问题,哎都怪自己学艺不精。再次感谢楼上几位。
liups 2010-11-11
  • 打赏
  • 举报
回复
ex.a[0] = 10:二进制是00001010,
ex.a[1] = 1 :二进制是00000001
合起来就是:0000000100001010,所以i就是266了!

注意这个合起来的顺序与实现有关,有的机器可能是0000101000000001,这样就不是266了。
cjingzm 2010-11-11
  • 打赏
  • 举报
回复
你在初始化时没有给i赋值,266是系统分配的随机数。
ruanxuewu0120 2010-11-11
  • 打赏
  • 举报
回复
看帖拿分走人
arong1234 2010-11-11
  • 打赏
  • 举报
回复
你这样赋值不就等于把i的最低位设置为10,第二位设置为1么?1*256+10不就是266么?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧