sizeof()应用于结构和变量

时间:2011-09-09 18:14:17

标签: c clang

请考虑以下代码段:

struct foo {
  int a;
  int b;
  int c;
};

struct foo f;
printf("%u, %u\n", sizeof(struct foo), sizeof(f));

代码返回相同的值,但我想知道应用于变量的sizeof()是否正确或者这只是巧合?

感谢。

4 个答案:

答案 0 :(得分:6)

两者都会且应该确实返回相同的值。

来自MSDN:

运营商的尺寸
sizeof运算符给出了存储操作数类型对象所需的存储量(以字节为单位)。此运算符允许您避免在程序中指定与机器相关的数据大小。

sizeof unary-expression  
sizeof ( type-name )

答案 1 :(得分:5)

sizeof适用于类型表达式。将其应用于某种类型后,()属于sizeof语法的一部分:sizeof(type)。将其应用于表达式时()不属于sizeof语法:sizeof expression

所以你的第二个sizeof并没有真正“应用于变量”。它适用于表达式(f)。该表达式由包含在f冗余对中的单个变量()组成。您也可以不使用()的冗余对,只使用sizeof f

sizeof应用于表达式时,它返回表达式结果的大小(即表达式具有的类型的大小)。在您的示例中,sizeof的两个应用程序都保证评估为相同的值。

事实上,良好的编程习惯是尽可能避免使用sizeof(type),即更喜欢使用sizeof expression。这使您的代码更加独立于类型,这总是一件好事。类型名称属于声明而不是其他任何地方。

答案 2 :(得分:1)

这是预期的,即两者都将返回相同的值。该值在编译时计算。

sizeof中使用变量通常是一种很好的做法,因为您可能会在以后更改类型,因此大小也可能会发生变化。

答案 3 :(得分:0)

通常,最好将其应用于变量。如果变量的类型发生变化,它将保持正确。