关键字--union
union关键字的用法与struct比较类似,不同的是union中的所有变量共用一段储存空间,同一个时刻union中只能储存数据成员中的一种,所以union可用的内存空间大小为最大长度成员变量的字节数。
例如:
union test
{
char c;
short m;
int * n;
long long int k;
};
test的的成员变量中,占用字节数最多的是k,所以test占用空间大小就是k占用的字节数(32位机器下为8字节)。
计算机大小端对union的影响:
先解释一下大小端,大端模式即高字节的数据储存在内存的低地址中(逆);小端模式即高字节的数据储存在内存高地址中(顺)。
分析一段代码:
int check()
{
union test
{
int i;
char c;
}TS;
TS.i = 1;
return (TS.c == 1);
}
调用check()函数返回的结果是多少呢?
在上面的代码中‘TS.i = 1;’因为int类型为4个字节,这一句实际上就是在test的四个字节中分别写入0x00,0x00,0x00,0x01; 而'TS.c'的含义就是取到test的最低一个字节的数据。
test的最低一个字节的数值就要涉及计算机的大小端模式了,在小端模式下,0x01放在最低字节,所以 TS.c == 0x01;在大端模式下,0x01放在最高字节,最低字节为0x00,所以 TS.c == 0x00.
用一个图片来说明,就很清楚了(其中0x100,0x101...表示内存地址):