变量在内存中的存储方式

来源:百度知道 编辑:UC知道 时间:2024/05/26 13:46:56
#include <stdio.h>;

union
{
int i;
char c1;
} a;

int main(void)
{
a.i=0x12345678;
printf("%x",a.c1);
}

这个的输出结果是78..不是应该是高位在前面的么?
没有人知道为什么吗?

a被定义为共用体 也就是说它采用了覆盖存储 意思是各个成员(你程序中的i,c1)是从一个存储区域开始的 共用体的容量就是成员中最大的容量 你程序中的i是整型的占16位的存储空间,char只占8位因此定义共用体的a只占16位存储空间。赋值时0x12345678前四位溢出 也就是说a中的内容实际是5678 地址从低位到高位存储的内容为8765 当输出a.c1时由于是char型只输出两位即78

printf不是一个字节一个字节的输出而是整体输出因此不是87而是78