int(abc)(int,int)是什么意思?

gir*_*ish 3 c++ function-pointers declaration

我正在尝试数组指针和函数指针的一些随机声明。我被打中了。

#include<bits/stdc++.h>
int add(int a,int b){ 
    return 1729; }
int main(){
    int (abc)(int,int);
    abc = add;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

发出的错误是:

#include<bits/stdc++.h>
int add(int a,int b){ 
    return 1729; }
int main(){
    int (abc)(int,int);
    abc = add;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但随着这两个abcadd是同一类型的,它为什么要转变?还是可以将函数分配给新变量?如果是这样,该怎么做?

Sto*_*ica 14

int (abc)(int,int);
Run Code Online (Sandbox Code Playgroud)

它不是函数指针。在这种情况下,多余的括号无关紧要,它等效于

int abc(int,int);
Run Code Online (Sandbox Code Playgroud)

这是一个函数声明,C ++允许您将其放置在几乎任何地方(例如另一个函数的主体)。您尝试将一个功能名称分配给另一个功能名称,因此代码无法编译。

要获取指针,您需要指针语法

int (*abc)(int,int);
Run Code Online (Sandbox Code Playgroud)

其中,此时,括号必需的,否则你就会得到一个函数声明与int*返回类型!现在,任务将格式正确。