主動(dòng)已經(jīng)是我對(duì)熱愛(ài)東西表達(dá)的極限了
- 什么是結(jié)構(gòu)體(
struct
)?
結(jié)構(gòu)體
是C語(yǔ)言中一種重要的數(shù)據(jù)類(lèi)型江掩,該數(shù)據(jù)類(lèi)型由一組稱(chēng)為成員(或稱(chēng)為域学辱,或稱(chēng)為元素)的不同數(shù)據(jù)組成,其中每個(gè)成員可以具有不同的類(lèi)型环形。結(jié)構(gòu)體通常用來(lái)表示類(lèi)型不同但是又相關(guān)的若干數(shù)據(jù)策泣。
- 什么是聯(lián)合體(
union
)?
- 聯(lián)合體中可以定義多個(gè)成員抬吟,聯(lián)合體的大小由最大的成員大小決定
- 聯(lián)合體的成員公用一個(gè)內(nèi)存萨咕,一次只能使用一個(gè)成員
- 對(duì)某一個(gè)成員賦值,會(huì)覆蓋其他成員的值
- 存儲(chǔ)效率更高火本,可讀性更強(qiáng)危队,可以提高代碼的可讀性聪建,可以使用位運(yùn)算提高數(shù)據(jù)的存儲(chǔ)效率
- 聯(lián)合體(
union
)也稱(chēng)之為共同體
聯(lián)合體代碼定義如下:
union {
char a;
short b;
int c;
float d;
double e;
};
-
結(jié)構(gòu)體(struct)與聯(lián)合體(union)區(qū)別:
結(jié)構(gòu)體struct
:
優(yōu)點(diǎn):存儲(chǔ)容量較大,包容性強(qiáng)茫陆,且成員之間不會(huì)相互影響(占用不同內(nèi)存
)
缺點(diǎn):變量共存的金麸,不管是否使用,都會(huì)開(kāi)辟內(nèi)存簿盅,極大的浪費(fèi)了內(nèi)存空間
聯(lián)合體(union)
:
缺點(diǎn):每個(gè)變量是互斥
的挥下,且包容性差
優(yōu)點(diǎn):所有成員共用一段內(nèi)存,使內(nèi)存的使用更為精細(xì)靈活桨醋,同時(shí)也節(jié)省了內(nèi)存空間
聯(lián)合體位域定義如下:
@interface LGCar(){
// 聯(lián)合體
union {
char bits;
// 位域
struct { // 0000 1111
char front : 1;
char back : 1;
char left : 1;
char right : 1;
};
} _direction;
}
@end
@implementation LGCar
- (instancetype)init
{
self = [super init];
if (self) {
_direction.bits = 0b0000000000;
}
return self;
}
- (void)setFront:(BOOL)isFront {
if (isFront) {
_direction.bits |= LGDirectionFrontMask;
} else {
_direction.bits |= ~LGDirectionFrontMask;
}
NSLog(@"%s",__func__);
}
- (BOOL)isFront{
return _direction.front;
}
- (void)setBack:(BOOL)isBack {
_direction.back = isBack;
NSLog(@"%s",__func__);
}
- (BOOL)isBack{
return _direction.back;
}
@end
從聯(lián)合體定義可以看出bits
與_direction
存在互斥
棚瘟,
當(dāng)bits
初始化時(shí),_direction
無(wú)默認(rèn)值
當(dāng)_direction
初始化時(shí)讨盒,bits
有默認(rèn)值
結(jié)構(gòu)體內(nèi)存計(jì)算原理及規(guī)則請(qǐng)參考:結(jié)構(gòu)體內(nèi)存計(jì)算