当前位置: 代码迷 >> C语言 >> [求助]求求大家帮个忙!!
  详细解决方案

[求助]求求大家帮个忙!!

热度:94   发布时间:2005-01-04 19:52:00.0
[求助]求求大家帮个忙!!

 看看这一段程序,怎么结果会是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,这究竟是怎么回事?


----------------解决方案--------------------------------------------------------
注意一下char 和int所占用的字节数,再将 r.i[1]改为1看看有什么结果
----------------解决方案--------------------------------------------------------
不明白
----------------解决方案--------------------------------------------------------

执行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;


----------------解决方案--------------------------------------------------------
系统给一个字符分配一个字节,给一个整型分配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编辑过]



----------------解决方案--------------------------------------------------------
我懂了,谢谢!
----------------解决方案--------------------------------------------------------
这只是一个相对简单的问题,最主要的就是要了解各种类型的数据在内存中以什么方式存储的,
还有就是在联合中,各个“变量”的相对位置是怎么放的 。
----------------解决方案--------------------------------------------------------
建议用"共用体'不用"联合体"概念,因为后者容易误导学习者,尤其是初学者.
"共用体'相对较准确.

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



----------------解决方案--------------------------------------------------------
  相关解决方案