有关C语言的一道题目.

来源:百度知道 编辑:UC知道 时间:2024/06/06 17:22:33
以下程序的输出结果是( A)
main()
{
union
{
char i[2];int k;
}r;
r.i[0]=2;r.i[1]=0;
printf("%d\n",r.k);
}

A.2 B.1 C.0 D.不确定

union类型是共享内存的,以size最大的结构作为自己的大小,在内存中的排列为声明的顺序i[0],i[1],从低到高,没有赋值 ,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是i[0]的位置,这样原来内存中i[0]的位置就被k所赋的值代替了,值依旧是未知,然后赋值的时候(r.i[0]=2;r.i[1]=0; )在内存中,就是i[0]的位置放置2,i[1]的位置放置0,(值变为已知)这个时候要进行打印,就直接看内存里就行了,k的位置也就是i[0]的位置是2.

联合体共用内存.
当用char r.i[0]=2;r.i[1]=0; 内存中的情况是
00000010
00000000
而当为int时由于内存存贮和显示刚好相反,就是一个两字节的整型,地址值小的存入高字节,地址值大的存入低字节.
上面的值就相当于int 0000000000000010=2.

D 不确定啥。。。和CPU字长,以及big or little endian 相关的。。

A.2

A

int型数默认为0

D.不确定