C语言学习(六)指针4 指向函数的指针
来源:互联网 发布:2017广电总局网络电视 编辑:程序博客网 时间:2024/05/22 07:44
指向函数的指针
1.一个函数在编译时被分配一个入口地址。这个函数的入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
例如:比较2个数字,返回大的数字:
void main() {
int swap(int a,int b);
int a,b,max;
a= 5;
b= 4;
int(*p)(int,int); /*用来定义p是一个指针函数的指针变量,该函数有两个整形参数,返回值为整形,括号不可省略。*/
p= swap; /*将函数的入口地址赋值给指针变量p,函数名代表该函数的地址*/
max = (*p)(a,b); /*以指针形式调用函数*/
printf("%d\n",max);
}
int swap(int a,int b) {
int tem;
tem= a > b ? a : b;
return tem;
}
说明:
a)指向函数的指针变量的定义形式为:
返回类型(*指针变量名)(参数列表);
b)在一个程序中,一个指针变量可以先后指向同类型的不同函数。
c)在给指针函数赋值的时候只需要函数名。
d)函数指针++,--运算无意义。
2.函数指针变量通常的用途之一是把指针作为参数传递到其他函数中。
简述如下:有一个函数sub,它有两个参数x1,x2。定义x1和x2为指向函数的指针变量。在调用函数sub时,实参为两个函数f1和f2,给形参传递的是f1和f2的地址。这样在函数中就可以调用f1和f2函数了。
实参函数名 f1 f2
void sub(int (* x1) (int),int (* x2) (int int)) {
int a,b,i,j;
a= (*x1)(i);
b= (*x2)(i,j);
}
应用场景:如果每次在调用sub函数时,要调用的函数不是固定的,这次调用f1和f2,而下次要调用f3和f4。这时只要在每次调用sub函数时给出不同的函数名作为实参即可,sub函数不必做任何修改。这种方法符合结构化程序设计方法原则,在程序设计中经常使用。
例如:设计一个函数,输入a和b,第一次调用输出大的数,第二次调用输出小的数,第三次调用输出两个数的和。
void main() {
int max(int,int);
int min(int,int);
int add(int,int);
int process(int,int,int (*p)(int,int));
int a,b,tem;
a= 5;
b= 8;
tem= process(a,b,max);
printf("maxis %d \n",tem);
tem= process(a,b,min);
printf("minis %d \n",tem);
tem= process(a,b,add);
printf("addis %d \n",tem);
}
int max(int a,int b) {
int tem;
tem= a > b ? a : b;
return tem;
}
int min(int a,int b) {
int tem;
tem= a > b ? b : a;
return tem;
}
int add(int a,int b) {
int tem;
tem= a + b;
return tem;
}
int process(int a,int b,int (*p)(int,int)) {
int tem;
tem= (*p)(a,b);
return tem;
}
输出:
maxis 8
minis 5
addis 13
文章链接:http://blog.csdn.net/murongshusheng/article/details/8690697
- C语言学习(六)指针4 指向函数的指针
- c语言学习,指针函数、函数指针、指针的指针、指向指针数组的指针
- c语言学习,指针函数、函数指针、指针的指针、指向指针数组的指针
- C语言指针学习:指向函数的指针
- C语言指针---指向函数的指针
- C语言函数指针(指向函数的指针)
- 105 C语言函数指针(指向函数的指针)
- C语言中的指针(指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针)
- 11.26C语言----指针函数/指向指针的指针
- C语言 指向函数的指针
- 指向函数的指针 - C语言
- 11.13 C语言----指向函数的指针
- C语言指向函数的指针
- C语言指向函数的指针
- C语言 指向函数的指针
- C语言指向函数的指针
- C语言--指向函数的指针
- c语言指针,指向指针的指针
- HDU 1395 2^x mod n = 1 数论
- SharedPreferences文件的存储位置
- 表访问方式
- java中实体类序列化的意义
- oracle错误代码大全
- C语言学习(六)指针4 指向函数的指针
- k-medoids 算法思想
- 网络管理中必须懂的ARP病毒查找和防范
- 使用 maven-shade-plugin打可执行jar包
- tsm删除备份方法
- [IOS]使用UIScrollView和UIPageControl显示半透明帮助蒙板
- opencms8.5.0-使用列表功能
- XCODE4.6从零开始添加视图
- linux之cp/scp命令+scp命令详解