union
共用体, 也叫联合体,c/c++中另一种自定义的数据类型;
- 联合就是一个结构;
- 所有成员相对基地址的偏移量为0;
- 此结构最大空间要足够容纳最宽的成员;
- 对齐方式要适合联合中所有的成员;
声明方式
union student {
int a;
short b;
char c;
};
和之前介绍过的结构体 有一样的声明语法。只是关键字不同而已。 也可以使用匿名union
union DATE {
int a;
short b;
char c;
};
NSLog(@"%lu", sizeof(union DATE)); // 输出4个字节
union DATE
联合体最宽字段是 int a
, 所以最大的内存容量是4;
union DATE {
char c[9];
int i;
double d;
};
NSLog(@"%lu", sizeof(union DATE)); // 输出16个字节
这个片段代码,输出大小16
, 因为, 这个联合体最大的字段是数组c9个字节,所以最大分配9,并且与最宽的字段 double d
的大小8
整除,因为9不能整除,所以提升到16
;
union DATE {
char c[5];
int i;
};
NSLog(@"%lu", sizeof(union DATE)); // 输出8个字节
这个案例如上, 最大分配5
个字节, 再看一下能否对齐另一个字段int i
,所以得出大小为8
;