1. 程式人生 > >關於巢狀結構體大小的計算

關於巢狀結構體大小的計算

先看下面的程式碼:

#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;  
  
}  
這是一段C++程式碼,編譯順利通過。結構體struct ss1和struct ss2中都定義了同一個結構體struct aa,所以C++中結構體內部的結構體作用域僅僅侷限於上層結構體內,

另外,結構體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會佔據相同的記憶體空間。這是第二點不同。相關的證明,大家可以自己修改程式碼測試,這裡不在累贅。