关于共用体

来源:百度知道 编辑:UC知道 时间:2024/05/29 17:15:49
#include<stdio.h>
union w
{
int x;
char ch[2];/**/
} a;

void main( )
{
a.ch[0]=12;
a.ch[1]=0;
printf("%d\n", a.x);
}
结果等于12.
这个结果是怎么来的呢?
请高手指教
谢谢各位,我已经知道是怎么回事了.
w中x与ch[2]共同占用一段内存区,
x属于int占两个字节,每个ch元素属于char占一个字节.
这样,ch[0],ch[1]可以分别表示x在内存区的两个字节.
那么由于a.ch[0]=12,a.ch[1]=0,那段x在内存区就可以表示为
00000000 00001100
↓..............↓
a.ch[1] a.ch[0]
将二进制转化为十进制,就可以得到x=12的结论了.
如果将a.ch[1]的值改为1,结果将是:268
(
因为内存区二进制数据为:
00000001 00001100
)
大家可以试一试!

union w
{
int x;
char ch[2];
}

共用体内部的成员都是公用一个内存空间,所以共用体所占内存单元取决于共用体内部占内存最大的一个成员,int x和char ch[2]用的是一块内存单元,互相之间可以覆盖,

a.x=12不是““因为a.ch[0]=12 ”。

因为你的成员x没有初始化,所以它是一个随机值。应该每次运行的结果都有可能不一样。12只是一个巧合。

因为a.ch[0]=12