首先我们必须知道,sizeof()是一个关键字而不是一个函数,这一点我们可以证明:
int main()
{
int a = 5;
short b = 3;
printf( "%d\n", sizeof (b = a + 2));
printf( "b=%d\n", b);
system( "pause");
return 0;
}

我们可以观察到,b的值没有发生变化,所以sizeof是一个关键字,而不是一个函数。
2、sizeof()在主函数里面使用,不能在在外部函数里面使用。
例:
int num_arr(int arr[]) //形参arr其实是数组的首地址,所以对他求内存相当于对arr[0]求内存
{
int b = sizeof (arr);
return b;
}
int main()
{
int arr[10];
int ret=num_arr(arr);
printf( "sizeof(arr)=%d\n", sizeof (arr)); //这个arrs是整个数组的地址,相当于&arr
printf( "ret=%d\n", ret);
system( "pause");
return 0;
}
这就是sizeof()不能再外部函数里面使用的原因。
3、int arr[10];
因为sizeof()是一个关键字 所以这两种方式都是正确的
sizeof arr;
sizeof(arr);
但是:
sizeof(int) 正确