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/