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来开发网 ...
随机推荐
- [C++程序设计]指向数组元素的指针
如果先使p指向数组a的首元素(即p=a),则: (1) p++(或p+=1).使p指向下一元素,即a[1]. 如果用*p,得到下一个元素a[1]的值. (2) *p++.由于++和*同优先级,结合方向 ...
- Joomla 二次开发 学习笔记
Joomla目录结构 /administrator 管理后台的路径 /cache 是缓存目录 /components 是组件(component)目录 /includes 是一个重要的目录,里面都是J ...
- information_schema.character_sets 学习
information_schema.character_sets 表用于查看字符集的详细信息 1.character_sets 常用列说明: 1.character_set_name: 字符集名 2 ...
- HtmlAttribute HTML属性处理类
HtmlAttribute 在HtmlAgilityPack扮演的是一个HTML代码属性的容器,同时提供了用于处理HTML属性的一些功能. 一.属性 int Line { get; } 获取文档中的此 ...
- C# Nullable可空类型
一个Nullable类型就是基本类型加上一个"是否为null指示器"的合成类型.对于一个类型,如果既可以给他分配一个值,也可以给它分配null引用,我们就说这个类型是可空的. 可空 ...
- [ArcGIS Engine]栅格数据处理 RasterDataset RasterLayer Raster RasterBandCollection
原文 http://www.cnblogs.com/zoe-j/archive/2012/03/22/2412403.html 1.由RasterLayer 得到RasterDataset IRast ...
- tar解压错误
# tar -zxvf aaa.tar.gz tar: This does not look like a tar archive tar: Skipping to next header ...
- LeeCode-Number of 1 Bits
Write a function that takes an unsigned integer and returns the number of ’1' bits it has For exampl ...
- CreateThread简单那多线程编程
CreateThread简单那多线程编程 作者:vpoet mail:vpoet_sir@163.com 在进行多任务处理的时候我们往往会用到多线程技术,多线程理论上是多个线程同事处理不同的工作,但是 ...
- vhd镜像格式及vhd-util工具应用
概述 VHD 是微软虚拟磁盘文件格式,qemu和tapdisk2都能支持VHD镜像格式,不仅提供基本的虚拟机卷功能,还可提供磁盘快照.磁盘扩容等高级功能 vhd-util是个linux下的开源软件,通 ...