c语言问题,麻烦解答一下

[复制链接]
查看11 | 回复3 | 2009-3-16 16:42:57 | 显示全部楼层 |阅读模式
如图,请帮忙解析一下哦~O(∩_∩)O~
还是不明白算到e.in.x被赋值成4后,此时e.a和e.b的值怎么也同时变成了4,e.a,e.b和e.in三个成员在内存中才是相同的地址吧?而e.in.x和e.in.y只是包含在共用体之间的结构体变量,并且每个元素都有自己的内存空间。

回复

使用道具 举报

千问 | 2009-3-16 16:42:57 | 显示全部楼层
答案是4和8,如果你对union理解的到位的话是很容易得出结果的,联合体就是说用联合体里最大的数据结构来申请内存。例子中的联合体的内存大小显示就是结构体in的内存大小。也就是2个int型占的内存,在32位机器上是8个字节。你要注意一点,e.a,e.b和e.in.x三个成员其实在内存中是相同的地址,而e.in.y是后面的地址。所以当你执行e.b=2;之后,e.a和e.in.x都是2,这个时候e.a*e.b肯定是4.然后e.in.x被赋值成4,此时e.a和e.b的值也同时变成了4,所以e.in.y就是8.明白了吗?...
回复

使用道具 举报

千问 | 2009-3-16 16:42:57 | 显示全部楼层
4,8 vc 的结果 自己跟踪了下,发现原理如下: e.a = 1;e.b = 2; //这里时,e.a=e.b 他们的值都是2 e.in.x = e.a*e.b; //e.a=e.b=e.in.x 他们的值都是4 e.in.y = e.a+e.b; //e.in.y的值是4+4=8 printf("%d,%d",e.in.x,e...
回复

使用道具 举报

千问 | 2009-3-16 16:42:57 | 显示全部楼层
2,3...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行