簡體   English   中英

計算其中具有結構的結構的大小

[英]calculate size of structure that has structure with in it

我有一個結構說:

struct sub_struct
{
 short  int  alpha; //2 bytes
 short  int  beta;
 short  int gamma;

}

struct big_struct
{
 char movie;
 char songs;
 short int release;

 sub_struct temp_struct[ 4 ];

}

我必須在代碼中的某處檢查sizeof結構,以便在標頭中定義如下內容:

const int LEN_BIG_STRUCT = sizeof( big_struct );

現在我的問題是LEN_BIG_STRUCT還會包含LEN_BIG_STRUCT的大小,還是我也需要定義sub struct的大小? 如果是,那我該怎么辦?

想象big_struct作為一個籃子,您在其中放入了一個較小的籃子sub_struct

如果您現在要把盛有小籃子的大籃子放在磅秤上; 如果重量不包括小籃子的重量,您會感到有些驚訝,不是嗎?

sizeof符合預期是一件好事。


換一種說法...

是的, sizeof得出參與其操作數的對象表示形式的字節總數; 包括任何潛在的填充。


這是C ++標准關於sizeof

當應用於一個類時,結果是該類的對象中的字節數,包括將該類型的對象放置在數組中所需的任何填充。

注意 :運算符在C中的工作方式相同。


sizeof(x)返回變量或類型x的字節總數。


在您的情況下:

  • small_struct :總共6個字節(每個short int 2個字節)。
  • big_struct :2個char和1個short ,以及一個small_struct數組,總計24個字節(4個元素* 6個字節)。

因此sizeof(big_struct)返回的字節總數為28

要回答您的問題,您不需要定義small_struct的大小,因為sizeof()會添加結構中包含的所有字節,如FilipRoséen在其答案中所述。


注意: 如下所述, big_struct 28個字節並非在所有系統上都通用。 這是由於C中的數據填充所致。您可以在下面閱讀有關它的內容:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM