首页 > 解决方案 > 函数指针是否需要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

但是应该是函数指针,而不仅仅是函数。那么它的语法如何?

标签: cfunction-pointerslanguage-design

解决方案


问题是

int *p(int,int)

将 p 声明为返回指向 int 的指针的函数 (int, int)

你需要

int (*p)(int,int)

它将 p 声明为指向返回 int 的函数 (int, int)的指针


推荐阅读