首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中,sizeof()函数是如何处理结构的?

在C中,sizeof()函数是如何处理结构的?
EN

Stack Overflow用户
提问于 2012-01-04 22:22:03
回答 4查看 2.8K关注 0票数 6

该结构的定义如下

代码语言:javascript
复制
typedef struct Sample
{
  int test;
  char strtest;
} Sample;

在Main函数中,我调用了Sizeof结构。

代码语言:javascript
复制
sizeof(struct Sample)

我听说结构上sizeof的返回值可能不正确。如果是这种情况,我应该怎么做才能获得正确的值?

EN

回答 4

Stack Overflow用户

发布于 2012-01-04 22:22:49

它确实返回了一个可靠的值--只是并不总是您所期望的值。

在Sample结构中,假设有1字节的char和4字节的int,但没有得到"5“的结果。

因为结构是填充的,所以元素从它们的自然边界开始。你更有可能得到"8“的结果。

维基很好地解释了这一点:http://en.wikipedia.org/wiki/Sizeof -在“结构填充”,靠近底部。

票数 22
EN

Stack Overflow用户

发布于 2012-01-04 22:26:52

Sizeof不是一个函数;它是一个运算符。它的结果总是正确的,但有时是意想不到的,因为填充,或相信它是一个神奇的数组大小决定因素。

作为运算符,如果在变量中操作,则不需要括号。

代码语言:javascript
复制
 int foo;
 printf("%zu\n", sizeof foo);

是完全合法的。

票数 1
EN

Stack Overflow用户

发布于 2012-01-04 22:43:09

具有结构类型的sizeof的工作方式与任何其他类型一样:运算符的结果是以字节为单位的类型大小。结构类型的大小与此结构类型的对象的大小相同。

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

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

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

代码语言:javascript
复制
printf("%zu\n", sizeof (struct my_structure_type));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8728377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档