[英]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.