union共用體, 也叫聯(lián)合體,c/c++中另一種自定義的數(shù)據(jù)類(lèi)型;
- 聯(lián)合就是一個(gè)結(jié)構(gòu);
- 所有成員相對(duì)基地址的偏移量為0;
- 此結(jié)構(gòu)最大空間要足夠容納最寬的成員;
- 對(duì)齊方式要適合聯(lián)合中所有的成員;
聲明方式
union student {
int a;
short b;
char c;
};
和之前介紹過(guò)的結(jié)構(gòu)體 有一樣的聲明語(yǔ)法。只是關(guān)鍵字不同而已。 也可以使用匿名union
union DATE {
int a;
short b;
char c;
};
NSLog(@"%lu", sizeof(union DATE)); // 輸出4個(gè)字節(jié)
union DATE 聯(lián)合體最寬字段是 int a, 所以最大的內(nèi)存容量是4;
union DATE {
char c[9];
int i;
double d;
};
NSLog(@"%lu", sizeof(union DATE)); // 輸出16個(gè)字節(jié)
這個(gè)片段代碼,輸出大小16, 因?yàn)椋?這個(gè)聯(lián)合體最大的字段是數(shù)組c9個(gè)字節(jié),所以最大分配9,并且與最寬的字段 double d的大小8 整除,因?yàn)?不能整除,所以提升到16;
union DATE {
char c[5];
int i;
};
NSLog(@"%lu", sizeof(union DATE)); // 輸出8個(gè)字節(jié)
這個(gè)案例如上, 最大分配5個(gè)字節(jié), 再看一下能否對(duì)齊另一個(gè)字段int i,所以得出大小為8;