一 概述
既然指针可以作为函数的参数,那么指向某个函数的指针为什么就不可以呢?
二 函数指针
函数指针作为函数的参数的一般形式为
1
| void func(void(*p)(int&,int&),int&,int&);
|
- 该函数func有三个参数,第一个参数void(*p)(int&,int&)是个函数指针,它指向一个带有两个Int型参数并且返回void值的函数,另外两个参数都是Int型引用
三 示例演示及结果输出
3.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include<iostream> using namespace std; void square(float&x,float&y){x=x*x;y=y*y;} void cube(float&x,float&y){x=x*x*x;y=y*y*y;} void print(void(*p)(float&x,float&y),float&x,float&y) { cout<<"执行函数前"<<endl; cout<<"x:"<<x<<"\t"<<"y:"<<y<<endl; p(x,y); cout<<"执行函数后"<<endl; cout<<"x:"<<x<<"\t"<<"y:"<<y<<endl; } void swap(float&x,float&y){float z;z=x;x=y;y=z;} int main() { float a=2,b=3; char choice='0'; int i; void (*p[5])(float&x,float&y); for( i=0;i<5;i++) { cout<<"(0)退出(1)正方(2)立方(3)交换x和y的值:"; cin>>choice; bool quit=false; switch(choice) { case '0': quit=true; break; case '1': p[i]=square; break; case '2': p[i]=cube; break; case '3': p[i]=swap; break; default: p[i]=0; break; } if(quit) break; if(p[i]==0) { cout<<"请输入一个从0到3之间的数字"<<endl; i=i-1; continue; } print(p[i],a,b); } return 0; }
|
3.2 输出结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| (0)退出(1)正方(2)立方(3)交换x和y的值:1 第1次执行,到第5次结束 初始值 长:2宽:3 现在调用函数指针数组p[0]所指向的函数... 运算后 长:4宽:9 (0)退出(1)正方(2)立方(3)交换x和y的值:2 第2次执行,到第5次结束 初始值 长:4宽:9 现在调用函数指针数组p[1]所指向的函数... 运算后 长:64宽:729 (0)退出(1)正方(2)立方(3)交换x和y的值:3 第3次执行,到第5次结束 初始值 长:64宽:729 现在调用函数指针数组p[2]所指向的函数... 运算后 长:729宽:64 (0)退出(1)正方(2)立方(3)交换x和y的值:
|