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

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





...全文
157 点赞 收藏 9
写回复
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
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告