我是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/