結(jié)構(gòu)體是一種用戶自定義的數(shù)據(jù)類型,它可以包含多個(gè)不同類型的變量。在C語言中,結(jié)構(gòu)體需要被正確地初始化才能使用,并且其實(shí)際所占用的內(nèi)存空間大小需要通過sizeof運(yùn)算符來計(jì)算。
1.結(jié)構(gòu)體怎么初始化
結(jié)構(gòu)體的初始化是指給結(jié)構(gòu)體成員變量賦初值的過程。結(jié)構(gòu)體變量的初始化可以有以下幾種方式:
- 按順序初始化,即按結(jié)構(gòu)體定義的順序逐一給成員變量賦值。
- 按名稱初始化,即直接指定每個(gè)成員變量的名稱和值。
- 使用C99標(biāo)準(zhǔn)新增的“設(shè)計(jì)器初始化”(designated initialization)特性,即可以指定某個(gè)成員變量的初始化值,而另外一些未指定的成員變量會(huì)以0或NULL的形式進(jìn)行默認(rèn)初始化。
比如:
struct Student { char name[20]; int age; float score; }; struct Student s1 = {"Tom", 18, 89.5}; struct Student s2 = {.name = "Jerry", .score = 92.0}; //只初始化部分成員變量 struct Student s3 = {[1] = 20, [0] = "Bob"}; //指定某些成員變量的初始化值
2.結(jié)構(gòu)體的sizeof怎么計(jì)算
C語言中,計(jì)算結(jié)構(gòu)體所占用的內(nèi)存空間大小需要使用sizeof運(yùn)算符。sizeof運(yùn)算符返回一個(gè)對(duì)象或類型所占用的字節(jié)數(shù)。
當(dāng)對(duì)結(jié)構(gòu)體類型進(jìn)行sizeof運(yùn)算時(shí),會(huì)得到該結(jié)構(gòu)體所占用的實(shí)際字節(jié)數(shù),其計(jì)算方法為:
struct Student { char name[20]; int age; float score; }; sizeof(struct Student) = sizeof(name) + sizeof(age) + sizeof(score) = 20 + 4 + 4 = 28
由于結(jié)構(gòu)體可能存在內(nèi)存對(duì)齊的問題,因此sizeof計(jì)算結(jié)果可能會(huì)比實(shí)際使用的內(nèi)存空間稍微大一些。