考虑下面的代码:的sizeof预想不到
#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。 – AnT 2010-02-06 03:14:50
另外,假设你的编译器支持那个特定的C99特性,用''%zu''打印'size_t'值('sizeof'返回的值)的正确方法是。如果没有,最好的办法是将其转换为'unsigned'或'unsigned long'。 – 2010-02-06 09:29:38