sizeof(函数(参数))返回什么?

什么是程序的输出

#include  int fun(char *a){ printf("%d\n",sizeof(a)); return 1; } int main(){ char a[20]; printf("%d\n",sizeof (fun(a))); return 0; } 

除了可变长度数组之外, sizeof不会计算其操作数。 所以它只会产生fun(a)类型的大小, sizeof(int) (不调用函数)。

C11(n1570)§6.5.3.4sizeof和_Alignof运算符

2 […]如果操作数的类型是可变长度数组类型,则评估操作数; 否则,不评估操作数,结果是整数常量。

它从该函数返回返回类型的大小(我的实现中有4 ,因为这是我占用的int ),如果按原样运行它会发现,然后将返回类型更改为char (此时它会给你1 )。

C99标准的相关部分是6.5.3.4.The sizeof operator

sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称。 大小由操作数的类型确定。 结果是整数。 如果操作数的类型是可变长度数组类型,则计算操作数; 否则,不评估操作数 ,结果是整数常量。

请记住,粗体位,这意味着函数本身未被调用(因此其中的printf不会被执行)。 换句话说,输出只是int类型的大小(当然后面跟一个换行符)。

该函数返回int ,因此它的sizeof(int)在32位系统上通常为4个字节。 虽然它可能是2或8,取决于实施。

关键字sizeof后跟省略号返回参数包中的元素数。

结果的类型是头文件中定义的无符号整数类型size_t