大家好,欢迎来到IT知识分享网。
函数指针数组
概念:
数组元素是指针函数的数组叫做指针函数数组,通常我们也叫做转移表
定义个初始化:
返回类型说明符 (*函数指针数组名[])(参数列表) = {函数指针/函数名,…};
如下: int (*fun_array[])(int,int) = {add,del,mul,div};
函数指针数组的使用如下:
函数指针数组名下标或者(*函数指针数组名)下标;
下面是给出的示例代码:
#include<stdio.h>
int add(int a,int b);
int sub(int a,int b);
int mul(int a,int b);
int div(int a,int b);
void make_menu();
int main(int argc,char* argv[]){
int (*fun_array [])(int,int) = {add,sub,mul,div};
int cmd = 0;
int result = 0;
int num1,num2;
while(1){
make_menu();
printf("please select a num what you want :");
scanf("%d",&cmd);
if(cmd == 0){
break;
}else{
printf("please input two num you want!\n");
scanf("%d %d",&num1,&num2);
result = fun_array[cmd-1](num1,num2);
printf("the form_1_result you want to calculate is:%d\n",result);
int (*fun_pointer)(int,int) = fun_array[cmd-1];
result = fun_pointer(num1,num2);
printf("the form_2_result you want to calculate is:%d\n",result);
result = (*fun_array[cmd-1])(num1,num2);
printf("the form_3_result you want to calculate is:%d\n",result);
}
}
return 0;
}
int add(int a,int b){
return a+b;
}
int sub(int a,int b){
return a - b;
}
int mul(int a,int b){
return a * b;
}
int div(int a,int b){
return a/b;
}
void make_menu(){
printf("=====================\n");
printf("1:add\n");
printf("2:sub\n");
printf("3:mul\n");
printf("4:div\n");
printf("0:quit\n");
printf("=====================\n");
}
由上面我们可以看出来函数指针数组的三种调用方式:
int (*pointer)(int ,int ) = fun_array[i];
int result = pointer(num1,num2);
或者:
int result = fun_arrayi;
或者:
int result =*(fun_array[i])(num1,num2);
第三种形式我们是不经常会用到的,
结果:
1:add
2:sub
3:mul
4:div
0:quit
please select a num what you want :1
please input two num you want!
10 11
the form_1_result you want to calculate is:21
the form_2_result you want to calculate is:21
the form_3_result you want to calculate is:21
函数指针数组的运用的注意点:
- 函数的返回类型一样,并且函数的形参也是要一样
- 通常是在swith函数中去做这样的函数指针数组,便于简化代码
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25403.html