簡體   English   中英

sizeof()函數如何適用於C中的Structures?

[英]How the sizeof() function works for Structures in C?

結構定義如下

typedef struct Sample
{
  int test;
  char strtest;
} Sample;

在Main Function中,我將Sizeof稱為結構。

sizeof(struct Sample)

我聽說sizeof在結構上的返回值可能不正確。 如果是這種情況,我該怎么做才能獲得正確的價值?

它確實返回了一個可靠的值 - 並不總是你期望的價值。

在Sample結構中,假設一個1字節的char和4字節的int,但是你沒有得到“5”的結果。

因為結構是填充的,所以元素從它們的自然邊界開始。 你更有可能得到“8”的結果。

Wiki很好地解釋了這一點: http//en.wikipedia.org/wiki/Sizeof - 位於底部附近的“Structure Padding”。

Sizeof不是函數; 它是一個運營商 它的結果始終是正確的,但有時是意外的,因為填充,或者認為它是一個神奇的數組大小確定器。

作為運算符,如果在變量中操作,則不需要括號。

 int foo;
 printf("%zu\n", sizeof foo);

是完全合法的。

具有結構類型的sizeof與任何其他類型一樣工作:運算符的結果是以字節為單位的類型的大小。 結構類型的大小與此結構類型的對象的大小相同。

所述sizeof的結構對象可以比因為填充的結構類型的不同元件的尺寸更大。

在每個結構成員之后可以填充未指定數量的字節,並且在結構類型(或結構類型的對象)的大小中考慮填充

要打印結構類型的大小,請使用printf格式字符串中的z轉換說明符:

printf("%zu\n", sizeof (struct my_structure_type));

在這里,您可以閱讀更多內容: http//somectips.wordpress.com/2012/01/05/what-is-the-size-of-struct/

暫無
暫無

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

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