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

C语言中函数指针带&与不带&引用:是否有风格选择依据?

在C语言中使用函数指针时,加&和不加&的风格选择理由

从语法层面来说,这两种写法完全等价:C标准规定,函数名在表达式中会隐式转换为指向该函数的指针,所以直接写函数名cb1和显式取地址&cb2的效果没有任何区别,编译器都会将其解析为函数指针,就像你提供的代码在gcc环境下编译运行无警告一样:

#include <stdio.h>

int cb1(void) { return 1; }

int cb2(void) { return 2; }

void do_cb(int (*cb)(void)) { printf("%d\n", cb()); }

int main(void) {
    do_cb(cb1);
    do_cb(&cb2);
}

风格层面的选择主要看团队习惯和可读性需求,两种写法各有侧重:

倾向于不加&的理由

  • 更简洁紧凑,符合C语言追求简洁表达的传统风格,很多经典C代码(比如Linux内核源码)都采用这种写法
  • 函数名转指针是C的默认行为,写起来更符合语言的“原生感”,对熟悉C规则的开发者来说更自然

倾向于加&的理由

  • 显式清晰,能让读者(尤其是新手)一眼明确这里是在取函数的地址,避免疑惑“为什么直接传函数名就能当指针用”
  • 和普通变量取地址的写法&var保持一致,语法上更统一,降低认知负担
  • 在复杂代码场景中,显式的&能更突出“传递指针”的意图,避免和其他语法特性混淆

总之,两种写法都合法且等价,没有绝对的优劣,关键是在团队或项目中保持风格统一,遵循既定的编码规范即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:01:06