每一个函数都占用一段内存单元,它们有一个起始地址,,指向函数入口地址的指针称为函数指针。
指向函数的指针变量的一般定义形式为:
参数表);
int (*p)(int a, int b); //p是一个指向函数的指针变量,所指函数的返回值类型为整型
int *p(int a, int b); //p是函数名,此函数的返回值类型为整型指针
int max(int x, int y); int (*p)(int a, int b);
可以先后指向不同的函数,但一个函数不能赋给一个不一致的函数指针(即不能让一个函数指针指向与其类型不一致的函数)。
如有如下的函数:int fn1(int x, int y);int fn2(int x);
定义如下的函数指针:int (*p1)(int a, int b);int (*p2)(int a);
则
p1 = fn1; //正确
p2 = fn2; //正确
p1 = fn2; //产生编译错误
来表示函数的下一条指令。
源代码:
#include <iostream>using namespace std;#include <conio.h>int max(int x, int y); //求最大数int min(int x, int y); //求最小数int add(int x, int y); //求和void process(int i, int j, int (*p)(int a, int b)); //应用函数指针int main(){int x, y;cin>>x>>y;cout<<"Max is: ";process(x, y, max);cout<<"Min is: ";process(x, y, min);cout<<"Add is: ";process(x, y, add);getch();return 0;}int max(int x, int y){return x > y ? x : y;}int min(int x, int y){return x > y ? y : x;}int add(int x, int y){return x + y;}void process(int i, int j, int (*p)(int a, int b)){cout<<p(i, j)<<endl;}
输出结果:
没有什么可凭仗,只有他的好身体,没有地方可去,只想到处流浪。