在c ++函数指针上的用法

Wei*_*ing 4 c++ pointers function-pointers

我是C++的新手,最近学习函数的指针,对函数指针的使用有点困惑;

我练习了以下代码:

#include <iostream>
#include <sstream>
using namespace std;

int subtraction(int a,int b){
    return a-b;
}

int main(int argc, const char * argv[])
{

    int (*minus)(int,int)=subtraction;
    cout<<minus(5,4);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

效果很好; 所以,我尝试了一点变化:

#include <iostream>
#include <sstream>
using namespace std;

int subtraction(int a,int b){
    return a-b;
}

int main(int argc, const char * argv[])
{

    int *minus(int,int)=subtraction;//only here different!
    cout<<minus(5,4);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在Mac上用Xcode练习它,它给了我错误:

非法初始化程序(只能初始化变量)

但我觉得编译器可以认识到两者是一样的,为什么必须有一对括号?

Yu *_*Hao 9

在您的原始代码中

int (*minus)(int,int)=subtraction;
Run Code Online (Sandbox Code Playgroud)

声明minus为带参数并返回的函数指针.int, intint

在你的第二个代码中

int *minus(int,int)=subtraction;
Run Code Online (Sandbox Code Playgroud)

声明minus为接受参数并返回指针的函数.int, intint *

您可以使用函数名称(自动转换为函数指针)来初始化函数指针,但不能初始化函数.