關於巢狀結構體大小的計算
阿新 • • 發佈:2019-02-16
先看下面的程式碼:
這是一段C++程式碼,編譯順利通過。結構體struct ss1和struct ss2中都定義了同一個結構體struct aa,所以C++中結構體內部的結構體作用域僅僅侷限於上層結構體內,#include<iostream> using namespace std; struct ss1{ int a; double b; struct aa{ int aa; double cc; }aa; int c; }ss1; struct ss2{ int a; double b; struct aa{ int aa; double cc; }; int c; }ss2; int main() { cout << sizeof(ss1) << endl; cout << sizeof(ss2) << endl; }
另外,結構體struct ss1中定義並聲明瞭結構體變數struct aa aa;結構體struct ss2中定義了結構體變數struct aa ,並沒有宣告struct aa的結構體變數;通過sizeof()函式可以得出,這兩個結構體struct ss1和struct ss2佔用不同大小的記憶體空間。
以上是在C++中。
那麼在C語言中呢。內層結構體struct aa的作用於適用於全域性,也就是說上述程式碼在編譯的時候,會提示struct aa重複定義的錯誤。這是第一點不同。另外,無論內層結構體struct aa有沒有宣告相應的結構體變數,都會佔據一定的記憶體空間 ,也就是說,在C中,上述的兩個結構體struct
ss1和struct ss2會佔據相同的記憶體空間。這是第二點不同。相關的證明,大家可以自己修改程式碼測試,這裡不在累贅。