该结构的定义如下
typedef struct Sample
{
int test;
char strtest;
} Sample;在Main函数中,我调用了Sizeof结构。
sizeof(struct Sample)我听说结构上sizeof的返回值可能不正确。如果是这种情况,我应该怎么做才能获得正确的值?
发布于 2012-01-04 22:22:49
它确实返回了一个可靠的值--只是并不总是您所期望的值。
在Sample结构中,假设有1字节的char和4字节的int,但没有得到"5“的结果。
因为结构是填充的,所以元素从它们的自然边界开始。你更有可能得到"8“的结果。
维基很好地解释了这一点:http://en.wikipedia.org/wiki/Sizeof -在“结构填充”,靠近底部。
发布于 2012-01-04 22:26:52
Sizeof不是一个函数;它是一个运算符。它的结果总是正确的,但有时是意想不到的,因为填充,或相信它是一个神奇的数组大小决定因素。
作为运算符,如果在变量中操作,则不需要括号。
int foo;
printf("%zu\n", sizeof foo);是完全合法的。
发布于 2012-01-04 22:43:09
具有结构类型的sizeof的工作方式与任何其他类型一样:运算符的结果是以字节为单位的类型大小。结构类型的大小与此结构类型的对象的大小相同。
由于填充,sizeof a structure对象可以大于结构类型的不同元素的大小。
在每个结构成员之后可以有未指定数量的字节填充,并且在结构类型(或结构类型的对象)的大小中考虑填充
要打印结构类型的大小,请在printf格式字符串中使用z转换说明符:
printf("%zu\n", sizeof (struct my_structure_type));https://stackoverflow.com/questions/8728377
复制相似问题