加的另一个操作数,这个操作数必须是高级表达式。
由于 (int *) & i 不是 sizeof 的高级表达式或同级表达式,所以希望对它做sizeof运算必须加括号,写成sizeof ((int *) & i)。(注:((int *) & i)构成了一个基本表达式)
而写成 sizeof (int *) & i 的话,就如同前面在3+6加上*一样不是(3+6)*2的含义而是3+(6*2)的含义一样,表达的可能是另一种含义,这个含义是
( sizeof (int *) ) & i
这里&其实是二元&运算。
既然是&是二元&运算,前面代码中没有给 i 初值 显然不妥,正确的代码是:
view sourceprint #include
#include
int main( void )
{
int i = 3 ; //whatever
printf(" %u " , sizeof (int *) ) ;
printf(" %u " , sizeof (int *) & i ) ;
return 0;
}