我有一些关于 sizeof
运算符的案例,它与 function 类型一起使用。
案例 1:[Live Demo]
#include <stdio.h>
char func()
{
printf("sizeof func = %zu\n", sizeof(func())); //Ok. Output : 1
return 0;
}
int main(void)
{
func();
}
sizeof(func())
在 C 中有效吗?
案例 2: [Live Demo]
printf("sizeof func = %zu\n", sizeof(&func())); // error
它不起作用。编译器报错。为什么?
案例 3: [Live Demo]
printf("sizeof func = %zu\n", sizeof(&func)); //Ok. Output : 8
这里,sizeof(&func)
是否等于指针的sizeof?
在这里,案例 3 工作正常,而 案例 2 给出错误。为什么?
最佳答案
sizeof
的操作数可以有两种形式:
带括号的类型名称,例如
(char)
,(int)
,(struct mystruct)
, ... 结果是命名类型的存储大小。一个表达式。结果是表达式将计算为(但未计算)的类型的存储大小。
您的示例都不是类型名称。您的函数的类型名称 将是char (void)
。所以你所有的括号都是多余的。
在您的第一个示例中,您有 sizeof func()
。计算 func()
将返回一个 char
,因此结果为 1
。
在您的第三个示例中,您有 sizeof &func
。评估 &func
会给你一个函数指针,函数指针的大小在你的机器上是 8
。
第二个例子是错误的,&func()
不是一个有效的表达式。您不能使用指向函数调用的指针。在标准术语中,func()
不是左值,它是应用&
所必需的。
关于c - C 中函数类型的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47223699/