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

int *func(…..)与int (*func)(…)为何有差异?是否与运算符*相关?

函数声明与函数指针声明的差异解析

这两种声明的差异完全和运算符*的绑定规则(优先级与结合性)直接相关,核心原因就是C语言里的运算符优先级顺序:

  • 对于 int *func(…..);:
    函数调用运算符()的优先级高于一元间接寻址运算符*,所以标识符func会先和()绑定,被解析成一个函数。剩下的*作用在函数的返回值上,说明这个函数的返回类型是int*(指向int的指针)。简单说,这就是个返回指针的函数。

  • 对于 int (*func)(….);:
    这里的括号()强制改变了优先级,让*先和func绑定,把func声明成一个指针类型。后面的()则说明这个指针指向的是一个返回值为int类型的函数。这就是标准的函数指针声明。

举个实际使用的例子:

  • 第一种声明的函数调用:int *p = func(42); —— 调用func,得到它返回的int指针。
  • 第二种声明的函数指针调用:int val = (*func)(42); —— 先通过*解引用指针,再调用指向的函数;C语言里也允许简化成func(42),编译器会自动处理隐式解引用,但本质还是调用指针指向的函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:39:20