请考虑以下代码段:
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 次 |
最近记录: |