【发布时间】:2011-01-13 13:04:01
【问题描述】:
考虑以下代码:
#include <stdio.h>
int main(void)
{
int a[10];
printf("%d",(int)sizeof(a)); //prints 10*sizeof(int) (40 on my compiler)
printf("%d",(int)sizeof(a-3)); //prints sizeof(int) (4 on my compiler)
}
我知道sizeof() 是一个编译时运算符,但我很惊讶地看到第二个printf() 的输出。可能是什么原因? sizeof() 的参数是否从数组类型隐式转换为整数类型?
【问题讨论】:
-
第二个实际打印的是
sizeof(int *),而不是sizeof(int)。sizeof(int *)在你的平台上恰好也是 4 岁。 -
另外,打印
size_t值(sizeof返回的值)的正确方法是使用"%zu",假设您的编译器支持特定的 C99 功能。如果没有,更好的选择是将其转换为unsigned或unsigned long。
标签: c