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

指定C语言函数指针时是否需要星号?两种写法差异解析

C语言中两种函数指针参数写法的区别

这两种写法在实际语义上完全等价——编译器会自动把第一种写法隐式转换成第二种的函数指针形式,本质上没有区别。

C语言的语法规则里有这么一条:当你在函数的参数列表中声明一个函数类型(比如double f(double)),它会被自动转换为指向该类型函数的指针(也就是double (*f)(double))。这算是个语法糖,让代码写起来更简洁,不用每次都写那对括号和星号。

举个实际的例子,不管你用哪种方式声明foo,调用的时候传函数名或者函数的地址都能正常工作:

double bar(double x) {
    return x * 2;
}

// 两种调用方式都合法
foo(bar, 123);
foo(&bar, 456);

而且在foo函数内部,不管参数是哪种写法,你使用f的时候都可以直接当成函数来调用(比如f(3.14)),这也是C的语法糖——函数指针可以不用显式解引用就能调用对应的函数,本质上和(*f)(3.14)是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:04:49