#include <iostream>
using namespace std;
int test(int a)
{
return a-1;
}
int test2(int (*fun)(int),int b)
{
int c = fun(10)+b;
return c;
}
int main(int argc, const char * argv[])
{
typedef int (*fp)(int a);
fp f = test;
cout<<test2(f, 1)<<endl; // 调用 test2 的时候,把test函数的地址作为参数传递给了 test2
return 0;
}
程序输出结果是:
10
整个程序的运行逻辑见下图:
需要注意到的是:
int test2(int (*fun)(int),int b)
表达的意思是:test2是一个函数,它输出一个整形的数,它的输入是两部分:
第一部分是一个函数指针int (*fun)(int),,这其中有2个int,第一个int表示它对外显示的就是一个整形的数,第二个int表示它有一个输入,且输入也要是整形,而fun是函数名称,它只是一个形参,不用太在意。
(注:int (*fun(int))的写法是错误的,因为只有函数名称是函数指针,而int仅仅代表它接收的参数类型,并不是指针的一部分。)
第二部分是int b,没啥好说的。
这个链接http://c.biancheng.net/view/228.html可以好好学习一下。