You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中sizeof(函数指针)与sizeof(函数名)的结果差异疑问

为什么sizeof(f)返回1而不是函数指针的大小?

首先明确核心规则:C语言标准不允许对函数类型使用sizeof操作符。sizeof的操作数必须是对象类型、void类型或者不完整类型,而函数类型不属于这些范畴,所以sizeof(f)本质是未定义行为——编译器可以自由选择如何处理这种情况,不同编译器可能给出不同结果。

你看到的返回1,是GCC、Clang这类常见编译器的非标准处理方式:

  • 当直接对函数名f使用sizeof时,编译器没有直接报错,而是将其视为一个“伪对象”返回占位大小1。这不是函数的实际大小(函数本身没有内存中的对象大小概念),只是编译器为了兼容某些旧代码或避免报错给出的一个默认值。
  • 而函数指针p属于对象类型(指针类型),它的大小由系统的地址总线宽度决定(64位系统通常是8字节,32位是4字节),这完全符合C标准的规定。

补充一点:如果尝试直接对函数类型使用sizeof,比如写sizeof(int(int)),编译器会直接报错,因为这明显违反标准;但对函数名f,编译器做了宽容处理,没有报错而是返回1,这是编译器的扩展行为,不是标准要求的。

内容的提问来源于stack exchange,提问作者Anuj Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:29:50