程序的输出是什么
#include <stdio.h>
int fun(char *a){
printf("%d\n",sizeof(a));
return 1;
}
int main(){
char a[20];
printf("%d\n",sizeof (fun(a)));
return 0;
}
答案 0 :(得分:18)
除了可变长度数组,sizeof
不会计算其操作数。所以它只会产生fun(a)
类型的大小,即 sizeof(int)
(不调用函数)。
C11(n1570)§6.5.3.4
sizeof
和_Alignof
运营商2 [...]如果操作数的类型是可变长度数组类型,则评估操作数;否则,不评估操作数,结果是 整数常数。
答案 1 :(得分:4)
它返回该函数的返回类型的大小(4
在我的实现上,因为那是int
占用的对象),如果按原样运行它,你会发现它,然后将返回类型更改为char
(此时它会为您提供1
)。
C99标准的相关部分是6.5.3.4.The sizeof operator
:
sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称。大小由操作数的类型确定。结果是整数。如果操作数的类型是可变长度数组类型,则计算操作数; 否则,不评估操作数,结果为整数常量。
请记住粗体位,这意味着函数本身未被 调用(因此其中的printf
不会被执行)。换句话说,输出只是int
类型的大小(当然是后面的换行符)。
答案 2 :(得分:3)
该函数返回int
,因此它是sizeof(int)
,在32位系统上通常是4个字节。虽然可能是2或8,但取决于实施。
答案 3 :(得分:1)
keyword sizeof后跟省略号返回参数包中的元素数。
结果的类型是头文件
中定义的无符号整数类型size_t