| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 628 人关注过本帖
标题:[求助]求求大家帮个忙!!
只看楼主 加入收藏
xiehongyou
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2004-8-29
收藏
 问题点数:0 回复次数:7 
[求助]求求大家帮个忙!!

 看看这一段程序,怎么结果会是2,怎么看都不明白! main() { union{ char i[2]; int k; } r; r.i[0]=2;

r.i[1]=0; printf("%d",r.k); getch();

} 就我的理解是:开始把2赋值给r.i[0],因为是共用型,把0赋值给r.[1]时就破坏了r.l[0]的值,以后就没有2了只有0,这究竟是怎么回事?

2005-01-04 19:52
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
注意一下char 和int所占用的字节数,再将 r.i[1]改为1看看有什么结果

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-01-04 21:07
haotian84
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-12-26
收藏
得分:0 
不明白
2005-01-05 08:54
workhard
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2004-11-17
收藏
得分:0 

执行r.i[0]=2; r.i[1]=0;后,k中的数据8位显示一个数为02;以整数形式显示就是2;

执行r.i[0]=2;r.i[1]=1;后,k中的数据8位显示一个数为12,以整数显示就是1*256+2=258;


2005-01-06 16:28
grub2linux
Rank: 1
等 级:新手上路
帖 子:335
专家分:0
注 册:2004-12-25
收藏
得分:0 
系统给一个字符分配一个字节,给一个整型分配2字节
执行r.i[0]=2; r.i[1]=0;后,2放在低位,高位的0无效,仍是2,00000000000000010
执行r.i[0]=2;r.i[1]=1;后,2放在低位(二进制00000010),1放在高位(00000001),,一个元素(字符)一个字节,总共2字节。以整型(一个整型占2字节),就是0000000100000010,就是258。

[此贴子已经被作者于2005-1-7 2:03:51编辑过]



有缘相识!我中文系的 3月拿下C/C++/VC 5天写游戏 2月写游戏系统 有空去http://mykool.go2.
2005-01-07 02:02
xiehongyou
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2004-8-29
收藏
得分:0 
我懂了,谢谢!
2005-01-07 07:03
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 
这只是一个相对简单的问题,最主要的就是要了解各种类型的数据在内存中以什么方式存储的,
还有就是在联合中,各个“变量”的相对位置是怎么放的 。

差点把你忘了...
2005-01-07 11:12
grub2linux
Rank: 1
等 级:新手上路
帖 子:335
专家分:0
注 册:2004-12-25
收藏
得分:0 
建议用"共用体'不用"联合体"概念,因为后者容易误导学习者,尤其是初学者.
"共用体'相对较准确.

[此贴子已经被作者于2005-1-7 13:27:30编辑过]



有缘相识!我中文系的 3月拿下C/C++/VC 5天写游戏 2月写游戏系统 有空去http://mykool.go2.
2005-01-07 13:26
快速回复:[求助]求求大家帮个忙!!
数据加载中...
 
   



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

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