sizeof()函数如何适用于C中的Structures?

结构定义如下

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与任何其他类型一样工作:运算符的结果是以字节为单位的类型的大小。 结构类型的大小与此结构类型的对象的大小相同。

由于填充,结构对象的大小可以大于结构类型的不同元素的大小。

在每个结构成员之后可以填充未指定数量的字节,并且在结构类型(或结构类型的对象)的大小中考虑填充

要打印结构类型的大小,请使用printf格式字符串中的z转换说明符:

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

在这里,您可以阅读更多内容: http : //somectips.wordpress.com/2012/01/05/what-is-the-size-of-struct/