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...表示内存地址):