一 概述
既然我们可以声明一个指向变量或者对象的指针数组,为什么就不能声明一个指向函数的指针数组呢?
二 函数指针数组
我们来看一下声明函数指针数组的一般表现形式:
1
| void (*p[5])(int&,int&);
|
- 它的意思是声明了一个有5个元素的数组指针,该数组指针所指的函数必须由两个int参数,而且要返回void值,也就是空值。
- 它与函数指针的区别只是指针数量的不同,函数指针可以存储一个函数的地址,而函数指针数组可以存储任意个函数
三 示例演示及结果
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 (*p[5])(int&,int&); 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(float&x,float&y){cout<<"长:"<<x<<"宽:"<<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; } cout<<"第"<<i+1<<"次执行,到第5次结束"<<endl; cout<<"初始值"<<endl; print(a,b); cout<<"现在调用函数指针数组p["<<i<<"]所指向的函数..."<<endl; p[i](a,b); cout<<"运算后"<<endl; print(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的值:2 第1次执行,到第5次结束 初始值 长:2宽:3 现在调用函数指针数组p[0]所指向的函数... 运算后 长:8宽:27 (0)退出(1)正方(2)立方(3)交换x和y的值:1 第2次执行,到第5次结束 初始值 长:8宽:27 现在调用函数指针数组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的值:
|