c++ - c++ 函数指针的用法

标签 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;
}

效果不错; 所以,我尝试了一些变化:

#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;
}

我在 Mac 上的 Xcode 中练习过,它给我错误:

Illegal initializer (only variables can be initialized)

但我认为编译器可以识别两者是相同的,为什么必须有一对括号?

最佳答案

在你的原始代码中

int (*minus)(int,int)=subtraction;

minus 声明为一个函数指针,它接受参数 int, int 并返回 int

在你的第二个代码中

int *minus(int,int)=subtraction;

minus 声明为一个函数,它接受参数 int, int 并返回一个指针 int *

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

关于c++ - c++ 函数指针的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18952921/

相关文章:

c - 我有这个错误 : argument of type 'char' is incompatible with parameter of type char*

c - 在 **my_vector 和 ***my_vector 上应用 free() 的区别

c++ - 跨 C++ 模块传递指向成员函数的指针

c++ - 不使用 boost 绑定(bind)

c++ - 如何从特征矩阵映射/构建 C++ vector ?

C编程,[错误]调用对象 'swap'不是函数或函数指针

c - 函数指针数组,传递数组中定义的值

c++ - 关于使用指向成员函数的指针的困境

c++ - 调用构造函数初始化变量

c++ - 如何将负时间戳转换为字符串。 C++