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