先直接上代码:
#include <stdio.h>
typedef union
{
int num;
char ch;
} union_test;
int main(void)
{
union_test test;
test.num = 0x12345678;
test.ch = 'a';
printf("union num:%.8x\n", test.num);
printf("union char:%c\n", test.ch);
printf("union num addr:%p\n", &test.num);
printf("union char addr:%p\n", &test.ch);
return 0;
}
程序输出如下:
union num:12345661
union char:a
union num addr:0x7fff6f998f30
union char addr:0x7fff6f998f30
自己对联合体的理解:
联合体,就是里面所有的变量共用一段内存,这段内存的大小,以联合体里面最大内存的变量为准。联合体里面所有的变量的起始地址都是同一个地址,在使用过程中,操作对象不同,实际就是操作的内存地址范围不同。
以上面的测试为例:
如果你操作的是成员变量num,那么实际操作的是从0x7fff6f998f30开始的4个字节的内存地址
如果你操作的是成员变量ch,那么实际操作的是从x7fff6f998开始的1个字节的内存地址