C函数指针简单用例
(1)函数指针:
可以指向 一类 固定形参类型和返回值类型 的函数 的指针
声明:
int fun(int, int)
||
\/
int (*pfun)(int, int)
pfun就是函数指针(变量)
调用:
d = pfun(a, b);
e = (*pfun)(a, b);
#####指针函数
int *fun(int, int);
int *(fun(int, int));
#####
/*ex01.c*/
#include <stdio.h>
int max(int a, int b) {
return (a > b ? a : b);
}
int min(int a, int b) {
return (a < b ? a : b);
}
int main(int argc, char *argv[]) {
int (*pfun)(int, int);
pfun = max;
int a = 0, b = 0, c = 0, d = 0, e = 0;
fscanf(stdin, "%d%d", &a, &b);
c = max(a, b);
d = pfun(a, b);
e = (*pfun)(a, b);
fprintf(stdout, "%d\n", c);
fprintf(stdout, "%d\n", d);
fprintf(stdout, "%d\n", e);
return 0;
}
(2)定义函数指针的类型 可以声明函数指针变量
typedef int (*Pfun)(int, int);
Pfun就是自定义函数指针类型
Pfun pfun = min;
创建Pfun类型变量pfun并将min函数赋值它
/*ex02.c*/
#include <stdio.h>
typedef int (*Pfun)(int, int);
int max(int a, int b) {
return (a > b ? a : b);
}
int min(int a, int b) {
return (a < b ? a : b);
}
int main(int argc, char *argv[]) {
Pfun pfun = min;
int a = 0, b = 0, c = 0, d = 0, e = 0;
fscanf(stdin, "%d%d", &a, &b);
c = min(a, b);
d = pfun(a, b);
e = (*pfun)(a, b);
fprintf(stdout, "%d\n", c);
fprintf(stdout, "%d\n", d);
fprintf(stdout, "%d\n", e);
return 0;
}
(3)可以将函数作为参数传入另一函数
#include <stdio.h>
typedef int (*Pfun)(int, int);
int max(int a, int b) {
return (a > b ? a : b);
}
int min(int a, int b) {
return (a < b ? a : b);
}
int dofun(Pfun pfun, int a, int b) { //用Pfun类型的函数指针变量pfun接收传入的函数
return pfun(a, b);
}
int main(int argc, char *argv[]) {
Pfun pfun = min;
int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;
fscanf(stdin, "%d%d", &a, &b);
c = min(a, b);
d = pfun(a, b);
e = (*pfun)(a, b);
f = dofun(min, a, b); //将min函数作为参数传入dofun,dofun用相应类型的函数指针接收
fprintf(stdout, "%d\n", c);
fprintf(stdout, "%d\n", d);
fprintf(stdout, "%d\n", e);
fprintf(stdout, "%d\n", e);
return 0;
}
C函数指针简单用例的更多相关文章
- c++ 函数指针简单实例
一开始看函数指针的时候我是很懵的,因为不知道它有什么用,之后慢慢就发现了自己的愚昧无知. 假设我们想实现一个数据结构,比如二叉搜索树,堆.又或者是一个快排,归并排序. 我们一般是直接在两个数要比较的时 ...
- 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)
1.函数指针声明的格式及简单的使用 (1)格式:(返回值)(*函数指针名)(参数列表) 例如:声明一个无参数无返回值的函数指针(void)(*p)(void). (2)将函数指针指向某个无参数无 ...
- 成员函数指针与高性能C++委托
1 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它宝贵的价值. ...
- [转]成员函数指针与高性能的C++委托
原文(作者:Don Clugston):Member Function Pointers and the Fastest Possible C++ Delegates 译文(作者:周翔): 成员函数指 ...
- C/C++函数指针详解(转)
这两天在研究C/C++的函数指针,找到一篇讲解比较详细的博客,内容有点多,但是讲解得比较详细,适合初学者.特转之: 1. 无处不见的函数指针 使用函数指针可以设计出更优雅的程序,比如设计一个集 ...
- C/C++中的函数指针
C/C++中的函数指针 一.引子 今天无聊刷了leetcode上的一道题,如下: Median is the middle value in an ordered integer list. If t ...
- C++使用简单的函数指针
函数指针: 被调用函数指针必须包括函数的存储器地址,为了正常工作,指针还必须包括其它信息,这一参数列表指针的参数类型和返回类型的函数. 因此,当你声明一个函数指针,数的參数类型和返回类型.以及指针名. ...
- 简单计算器的C实现-函数指针,main函数传参
/** 程序功能:简单计算器,实现加减乘除平方* 作者版本日期:2015.11.08 zhouhb OK* 源代码:李明 <新概念C语言培训>第33集 C语言Shell命令解释器的实现* ...
- Delphi下使用指针的简单总结(指针的赋值,数组和指针的转换,函数指针的使用)
由于最近公司太忙,好久没有更新我的BLOG了.原来想着写写关于HOOK驱动的文章,可是最后想想好久已经没有做驱动的东西了,怕写出来有错误,于是作罢.开发游戏也有一段时间了,发现使用DELPHI来开发网 ...
随机推荐
- yii2中的url美化
在yii2中,如果想实现类似于post/1,post/update/1之类的效果,官方文档已经有明确的说明 但是如果想把所有的controller都实现,这里采用yii1的方法 'rules' =&g ...
- Python学习笔记一,输入输出
输出:用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下>>>print('hello,world') 也可以是多 ...
- 高可用集群(HA)之Keeplived原理+配置过程
原理--> 通过vrrp协议,定义虚拟路由,在多个服务节点上进行转移. 通过节点优先级,将初始虚拟路由到优先级高的节点上,checker工作进程检测到主节点出问题时,则降低此节点优先级,从而实现 ...
- BZOJ 3529 数表(莫比乌斯反演)
http://www.lydsy.com/JudgeOnline/problem.php?id=3529 思路:令F(i)为i的约数和, 1<=x<=n,1<=y<=m G(i ...
- HttpContext请求上下文对象
一.HttpContext概述 HttpContext基于HttpApplication的处理管道,由于HttpContext对象贯穿整个处理过程,所以,可以从HttpApplication处理管道的 ...
- C# 多线程的自动管理(线程池) 基于Task的方式
C# 多线程的自动管理(线程池) 在多线程的程序中,经常会出现两种情况: 1. 应用程序中线程把大部分的时间花费在等待状态,等待某个事件发生,然后给予响应.这一般使用 ThreadPool(线程 ...
- undefined reference to `png_set_longjmp_fn'
这个是在Linux上编译项目的时候,一个动态库层用到的一个函数实现未找到,即使我链接了libpng2也没有找到,原因是这个库老了一些,没有这个函数定义,需要链接更高版本的png库,CentOS上有了在 ...
- Spring Task Scheduler - No qualifying bean of type [org.springframework.scheduling.TaskScheduler] is defined
1. Overview In this article, we are discussing the Springorg.springframework.beans.factory.NoSuchBea ...
- 百度地图LV1.5实践项目开发工具类bmap.util.jsV1.1
/** * 百度地图使用工具类-v1.5 * * @author boonya * @date 2013-7-7 * @address Chengdu,Sichuan,China * @email b ...
- Lake Counting (POJ No.2386)
有一个大小为N*M的园子,雨后积起了水,八连通的积水被认为是链接在一起的求出园子里一共有多少水洼? *** *W* *** /** *进行深度优先搜索,从第一个W开始,将八个方向可以到达的 W修改为 ...