sizeof()应用于结构和变量

Mar*_*ark 6 c clang

请考虑以下代码段:

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

struct foo f;
printf("%u, %u\n", sizeof(struct foo), sizeof(f));
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Alo*_*ave 6

两者都将并且应该确实返回相同的值.

来自MSDN:

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

sizeof unary-expression  
sizeof ( type-name )
Run Code Online (Sandbox Code Playgroud)


AnT*_*AnT 5

sizeof适用于类型表达式.将它应用于类型时,()它们是sizeof语法的一部分:sizeof(type).将它应用于表达式时(),不是sizeof语法的一部分:sizeof expression.

所以你的第二个sizeof并不是真的"应用于一个变量".它适用于表达式(f).该表达式由一个f包含在冗余对中的单个变量组成().你也可以不用那些多余的()而且只使用它sizeof f.

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

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