程序的输出是什么
#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;
}
除可变长度数组外,sizeof
不计算其操作数。所以它只会产生fun(a)
类型的大小,即 sizeof(int)
(不调用函数)。
C11 (n1570) §6.5.3.4
sizeof
和_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