函数指针,即指向函数的指针,函数其实也就是一个代码块,也有指针,运用函数指针可以实现很多功能;比如调用函数或者用作函数参数(回调函数); 函数指针的声明方法和普通函数略有区别;返回值类型 ( 指针变量名) ([形参列表]); 例如: int func(int x);
int (*f) (int x); f = func之后,就可以直接运用(*f) (int x)调用func函数了;: 1: 首先看一个实例:
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int Max(int a,int b);
int (*p)(int,int);
int _tmain(int argc, _TCHAR* argv[])
{
int i,j;
cout<<"输入两个正数:"<<endl;
cin>>i>>j;
cout<<"调用原函数的返回的最大值:"<<endl;
cout<<Max(i,j)<<endl;
p=&Max;
cout<<"调用指针函数的返回的最大值:"<<endl;
cout<<(*p)(i,j)<<endl;
cin.get();
cin.get();
return 0;
}
int Max(int a,int b)
{
return (a>b?a:b);
}
运行结果:
p是指向函数的指针变量 ,所以可把函数Max()赋给p作为p的值,即把Max()的入口地址赋给p,以后就可以用p来调用该函数,实际上p和Max都指向同一个入口地址,不同就是p是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。 不过注意,指向函数的指针变量 没有++和--运算,用时要小心。
2:当函数指针也可以用作另一个函数的参数: 看一段代码:
// FuncPtr.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
double Triangle_area(double&,double&); //三角形面积;
double Rectangle_area(double&,double&); //矩形面积;
double print_area(double(*p)(double&,double&),double&,double&); //把函数指针作为参数传递;
int _tmain(int argc, _TCHAR* argv[])
{
double a=2,b=3;
bool quit = false;
char choice;
double(*p)(double&,double&);
while(quit==false)
{
cout<<"三角形面积(1) 矩形面积(2) quit(q)"<<endl;
cin>>choice;
switch (choice)
{
case 'q':
quit = true;
break;
case '1':
p=Triangle_area;
print_area(p,a,b);
break;
case '2':
p = Rectangle_area;
print_area(p,a,b);
break;
default:
cout<<"请按规矩出牌!"<<endl;
}
}
//cin.get();
//cin.get();
return 0;
}
double Triangle_area(double& a,double& b)
{
cout<<"三角形面积为:"<<a*b*0.5<<endl;
return 0;
}
double Rectangle_area(double& a,double& b)
{
cout<<"矩形面积为:"<<a*b<<endl;
return 0;
}
double print_area(double(*p)(double& a,double& b),double&a ,double& b)
{
p(a,b);
return 0;
}
运行结果如下: