| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1238 人关注过本帖
标题:关于共用体的问题
取消只看楼主 加入收藏
skysky198344
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-10-27
收藏
 问题点数:0 回复次数:4 
关于共用体的问题
下面这个问题,假设结构体中的成员按书写顺序从低字节向高字节排列。
main()
{
   union vvv
   {                                                        我不明白,为什么输出结果是 1,2;
      struct{ int x; char y; }m;
      char a; char b;                                        请指点一下,关于共用体我有不懂之处。
    }k;
    k.a = 2;
    k.b = 1;
    k.m.x = k.a * k.b;
    k.m.y = k.a + k.b;
    printf( "\n%d%d", k.m.x, k.m.y );
}

[[it] 本帖最后由 skysky198344 于 2008-11-3 20:07 编辑 [/it]]
搜索更多相关主题的帖子: _union question 
2008-11-03 20:03
skysky198344
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-10-27
收藏
得分:0 
这个是大伙不懂呢?还是都忙呢
2008-11-04 13:33
skysky198344
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-10-27
收藏
得分:0 
[bo][un]forever74[/un] 在 2008-11-4 19:14 的发言:[/bo]

通过看书,你应该了解k.a,k.b,k.m.x这几个东西是重叠在一起的,也就是说它们是同样的内存单元的一些别名。
其中k.a,k.b是单字节,k.m.x长一些。
而k.m.y和前面三个不是重合的,是独立的。
所以考虑到数据比较小的 ...


你这个里面说得k.m.y为什么和前面三个不是重合的呢?为什么?因为据我所知,这个共用体中任何一个变量的改变都会导致全部其他变量的改变,至于改变成何值,这个我也是不清楚的。然后你说得k.a和k.b,因为k.b后出现了,所以用k.b来参加运算,我只能这么理解。
2008-11-05 09:08
skysky198344
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-10-27
收藏
得分:0 
回复 7# 的帖子
版主解释可以理解了。谢谢你。
2008-11-05 11:10
skysky198344
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-10-27
收藏
得分:0 
回复 7# 的帖子
但是我不明白你后半句,就是a为什么没有内存分配了?共用体是以其中某个变量的最大存储空间作为整个的空间,显然结构体的存储需要3个字节,所以整个共用体需要3个字节。那即使k.b调用了1,k.a也是还有2个空间的字节来用啊。这是怎么个原因呢?
2008-11-05 11:15
快速回复:关于共用体的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024076 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved