c - 函数指针是否需要c中的括号?
问题描述
从这个问题C 中的函数指针如何工作?,我在这里试过:
#include <stdio.h>
int add(int a, int b){ return a+b; }
int add2(int(*fp)(int,int)){
return fp(2,3);
}
int (*factory(int n))(int,int){
printf("got params:%i\n",n);
return add;
}
int main(){
int *p(int,int) = factory(5); // it has to be (*p)
printf("%i\n",p(1,2));
}
有提到
标准说函数名被转换为函数的地址
因此,当它转换为地址时,无论如何它都应该在没有括号的情况下工作。
但它给出了错误:
function ‘p’ is initialized like a variable
但是应该是函数指针,而不仅仅是函数。那么它的语法如何?
解决方案
问题是
int *p(int,int)
将 p 声明为返回指向 int 的指针的函数 (int, int)。
你需要
int (*p)(int,int)
它将 p 声明为指向返回 int 的函数 (int, int)的指针
推荐阅读
- json - 如何使用不同的对象发出这个 POST 请求?
- node.js - 如何将相同的消息广播到 Mosca 中的多个接口
- python - scrapy-splash 活动内容选择器适用于 shell 但不适用于蜘蛛
- python - 当 Python 3 的 names=True 时,Numpy genfromtxt 似乎不起作用
- javascript - 基于另一个值打印一个值的对象
- wordpress - 产品图片未在 woocommerce 中显示
- regex - VIM 正则表达式捕获组什么也没捕获
- mongodb - 如何在 mongoDB 的嵌入式字段中获取总和
- python - 如何根据所有其他功能填充null
- javascript - 无法在网络服务器上加载内部 .js 文件