加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 1.結(jié)構(gòu)體怎么初始化
    • 2.結(jié)構(gòu)體的sizeof怎么計(jì)算
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

結(jié)構(gòu)體怎么初始化 結(jié)構(gòu)體的sizeof怎么計(jì)算

2022/02/22
708
閱讀需 3 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

結(jié)構(gòu)體是一種用戶自定義的數(shù)據(jù)類型,它可以包含多個(gè)不同類型的變量。在C語(yǔ)言中,結(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語(yǔ)言中,計(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)存空間稍微大一些。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜