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

时间:2012-09-30 07:26:35

标签: c sizeof

程序的输出是什么

#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;
}

4 个答案:

答案 0 :(得分:18)

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

  

C11(n1570)§6.5.3.4sizeof_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