#include<stdlib.h>
int main()
{
union a
{
char b;
int c;
};
union a x;
x.b=5;
x.c=4;
printf("%d\n",x.b);
return 0;
}
结果是4
那联合体到底有什么作用呢????
4 个解决方案
#1
有时需要使几种不同类型的变量存放在同一段内存单元中
#2
联合体的所有变量共享一个存储空间,存储空间大小为变量类型的最大字节数,所以赋值4会覆盖掉5
#3
弱类型语言
#4
举个例子,利用union判断Big Endian\Little Endian方法:
static union
{
char c[4];
unsigned long mylong;
}
endian_test = {{ 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)
ENDIANNESS 为 'l' 则为little endian, 为 'b'则表示big endian
static union
{
char c[4];
unsigned long mylong;
}
endian_test = {{ 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)
ENDIANNESS 为 'l' 则为little endian, 为 'b'则表示big endian
#1
有时需要使几种不同类型的变量存放在同一段内存单元中
#2
联合体的所有变量共享一个存储空间,存储空间大小为变量类型的最大字节数,所以赋值4会覆盖掉5
#3
弱类型语言
#4
举个例子,利用union判断Big Endian\Little Endian方法:
static union
{
char c[4];
unsigned long mylong;
}
endian_test = {{ 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)
ENDIANNESS 为 'l' 则为little endian, 为 'b'则表示big endian
static union
{
char c[4];
unsigned long mylong;
}
endian_test = {{ 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)
ENDIANNESS 为 'l' 则为little endian, 为 'b'则表示big endian