关于C语言联合体的一个小题目

来源:百度知道 编辑:UC知道 时间:2024/07/04 19:20:53
#include<stdio.h>

main()
{
union
{
int k;
char i[2];
}*s,a;
s=&a;
s->i[0]=0x39;s->i[1]=0x38;
printf("%x\n",s->k);
}

为什么输出是cccc3839,谁可以解释下啊?谢谢了!

首先,你明白s->和a.在这里是一样的吧?
1.将0x39赋值给s为首地址的一个字节里,char占一个字节,对应低地址
2.将0x38赋值给s+1为首地址的一个字节里,char占一个字节,对应高地址
3.输出一个int型(2个字节),之所以是3839而不是3938那是因为在计算机上开辟一个int形式,默认为int数的高位对应高地址,地位对应低地址,也就说38高地址是int型中的高位。其实所有的两个字节以上的数据类型在内存中都是这样存储的(计算机组成原理里会讲)。这样说你明白了吗