回覆列表
  • 1 # 使用者7724043881117

    對的,結構體型別的定義只是告訴編譯器該如何表示資料,但是它沒有讓計算機為其分配空間。結構體型別的定義就是結構體的宣告,不管是定義還是申明,這句話都是正確的。

    只有在結構體變數,宣告的時候可以分配。要使用結構體,那麼就需要建立變數,也就是結構體變數。

    建立一個結構體變數:struct book library

    看到這條指令,編譯器才會建立一個結構體變數library,此時編譯器才會按照book模板為該變數分配記憶體空間,並且這裡儲存空間都是以這個變數結合在一起的。

    同時後面訪問結構體變數成員的時候,就要用到結構體變數名來訪問。

    擴充套件資料:

    結構體的大小通常是結構體所含變數大小的總和,但是對於結構體中比較小的成員,可能會被強行對齊,造成空間的空置,這和讀取記憶體的機制有關,為了效率。

    通常32位機按4位元組對齊,小於的都當4位元組,有連續小於4位元組的,等到湊整,加上下一個元素超出一個對齊位置,才開始調整,比如3+2或者1+4,後者都需要另起(下邊的結構體大小是8bytes)。

    struct s

    {

    char a;

    short b;

    int c;

    }

    相應的,64位機按8位元組對齊。

    不過對齊不是絕對的,用#pragma pack()可以修改對齊,如果改成1,結構體大小就是成員變數大小的總和。

  • 中秋節和大豐收的關聯?
  • 孫武的故事?