下面二道题就是看不懂为啥是这样的结果

llf_hust 2004-12-26 03:59:37
main()
{union example
{struct
{int x;int y;}in;
int a;
int b;
}e;
e.a=1;e.b=4;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d,%d",e.in.x,e.in.y);
} 此程序运行结果是4,9

main()
{union zj
{int a;
char ch[2];
}au;
au.a=298;
printf("%d\n,%d\n",au.ch[0],au.ch[1]);
} 此程序运行结果是42,1





...全文
188 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuelong_zl 2004-12-27
  • 打赏
  • 举报
回复
mark
jackytan_2008 2004-12-26
  • 打赏
  • 举报
回复
我支持楼上说法,共用体每次修改里面的值都会变(这是公用体的特性,共用存储单元啊)!
190227827 2004-12-26
  • 打赏
  • 举报
回复
第二问输出的不是地址吗?!
Salam2001 2004-12-26
  • 打赏
  • 举报
回复
设系统是用32位类存储int类型的,下面的图,其中“| |”代表两个字节:
in.y in.x
e.in: | | |
e.a : | |
e.b : | |
-------------------------------------------------
1 ...e.a = 1;
4 ...e.b = 4;
16 ...e.in.x = e.a * e.b;
32 16 ...e.in.y = e.a + e.b;
Salam2001 2004-12-26
  • 打赏
  • 举报
回复
我的VS6,第一个结果也是16,32,很正常。
第二个就不用说了。
xinyu0092 2004-12-26
  • 打赏
  • 举报
回复
很奇怪,为什么e.a=e.b都等于16那?
Roaming_Sheep 2004-12-26
  • 打赏
  • 举报
回复
0x012A (16进制) = 298 (10进制)
0x2A (16进制) = 42 (10进制)
0x01 (16进制) = 1 (10进制)


llf_hust 2004-12-26
  • 打赏
  • 举报
回复
那第二个程序为什么输出42,1呀
insulator 2004-12-26
  • 打赏
  • 举报
回复
main()
{union example
{struct
{int x;int y;}in;
int a;
int b;
}e;
e.a=1;e.b=4;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d,%d",e.in.x,e.in.y);
} 此程序运行结果是4,9
////////////////////////////////////////
结果好像是16,32

69,369

社区成员

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

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