union U{
short a;
char c;
};
U u;
在C Programming Language 一书中对于联合体是这么描述的:
1)联合体是一个结构;
2)它的所有成员相对于基地址的偏移量都为0;
3)此结构空间要大到足够容纳最"宽"的成员;
4)其对齐方式要适合其中所有的成员;
所以一个联合体在内存中的存储形式如下图:
从图中,很容易看出变量a、c、u的地址都是0x20000000
u.a=0x1234;
小端模式(数据的高字节保存在内存的高地址中)下,存储情况如下:
大端模式下(数据的高字节保存在内存的低地址中),存储情况如下:
所以,只要我们取出变量c的值,进行比对;若其值为34h,则机器为小端模式,若其值为12h,则机器为大端模式。
实现代码如下:
#include <stdio.h>
union U{
int a;
char c;
}u;
int main()
{
u.a=0x1234;
if(0x34 == u.c)
{
printf("The machine is little-end.\n");
}
else if(0x12 == u.c)
{
printf("The machine is big-end.\n");
}
return 0;
}
更多精彩资讯,请扫码关注