请考虑以下代码段:
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()是否正确或者这只是巧合?
谢谢.
两者都将并且应该确实返回相同的值.
来自MSDN:
sizeof运算符
sizeof运算符给出了存储操作数类型对象所需的存储量(以字节为单位).此运算符允许您避免在程序中指定与机器相关的数据大小.
sizeof unary-expression
sizeof ( type-name )
Run Code Online (Sandbox Code Playgroud)
sizeof适用于类型和表达式.将它应用于类型时,()它们是sizeof语法的一部分:sizeof(type).将它应用于表达式时(),不是sizeof语法的一部分:sizeof expression.
所以你的第二个sizeof并不是真的"应用于一个变量".它适用于表达式(f).该表达式由一个f包含在冗余对中的单个变量组成().你也可以不用那些多余的()而且只使用它sizeof f.
当sizeof应用于表达式时,它返回表达式结果的大小(即表达式具有的类型的大小).在您的示例中,两个应用程序sizeof都保证评估为相同的值.
事实上,一个好的编程实践是尽可能地避免sizeof(type),即更喜欢使用sizeof expression.这使您的代码更加独立于类型,这总是一件好事.类型名称属于声明而不是其他地方.
| 归档时间: |
|
| 查看次数: |
1691 次 |
| 最近记录: |