C中函数指针的基本语法和思想
1.C语言中函数的调用可分为直接调用和间接调用(函数指针),具体调用方法如下:
int add(int a,int b)
{
return a+b;
}
void main()
{
add(1,2);//直接函数调用,函数名就是函数的入口地址
//1.定义一个函数类型
typedef int (myAdd1)(int ,int ); //myAdd1就是一个函数类型
myAdd1 *p1=NULL;
p1=&add; //这里写成p1=add也可以,这是因为C编译器是逐渐完善起来的,有兼容历史版本的原因在里面
p1(3,4);//函数的间接调用
//2.定义一个函数指针类型
typedef int (*myAdd2)(int ,int ); //myAdd2就是一个函数指针类型
myAdd2 p2=NULL;
p2=&add;
p2(3,4);//函数的间接调用
//3.直接定义一个函数指针变量
int (*p3)(int ,int ); //myAdd2就是一个函数指针类型
p3=&add;
p3(3,4);//函数的间接调用
}
2.C语言中,函数指针做函数参数的方法:
//函数的具体实现
int add1(int a,int b)
{
return a+b;
}
int add2(int a,int b)
{
return a+b;
}
int add3(int a,int b)
{
return a+b;
}
//函数的调用,实现求1+2的和的功能
int fun(int (*padd)(int,int))
{
padd(1,2);
}
//主函数里面直接调用fun()函数,用一个统一的接口实现想要的功能
void main()
{
fun(add1);
fun(add2);
fun(add3);
}
上面通过函数指针调用函数的方法,使用一种调用形式就可以实现不同函数的调用。这种做法思想上和C++中多态的思想是相同的,好处也非常明显:定义好函数的接口之后,后来人只要根据此接口去填写自己的代码,现在的人不需要改动什么就可以轻松地调用后来人写的代码。
利用函数指针调用函数的精髓在于:函数指针类型提前做了约定。
为了解释这句话的意思,可以对比上面的实例:fun()函数的传入参数,即函数指针padd提前封装好了函数对外的接口,包括函数输入、输出参数的类型、个数(函数add1(),add2(),add3()的类型是一样的)。这样fun()函数就可以利用一个统一的函数指针形参padd去描述函数的操作,相当于把框架搭建好了,函数的调用形式被确定下来了。具体执行的时候,再根据传来的实参去回调具体的函数代码,如add1()、add2()或add3()。因此,fun()函数的传入参数padd就如同是C++中的父类指针,add1(),add2(),add3()就像是C++中的纯虚函数的具体实现。
转载于:https://www.cnblogs.com/jswu-ustc/p/8409029.html
C中函数指针的基本语法和思想相关推荐
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用. //形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(in ...
- C/C++中函数指针的含义(转)
C/C++中函数指针的含义 函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢?如果我们有一个int test(int a ...
- C++中函数指针数组的使用
C++中函数指针数组的使用 来源:电脑教程在线(http://www.linuxdiyf.com/1/) 作者:linux 原文:C++中函数指针数组的使用(http://www.linuxdiyf. ...
- 关于C++中函数指针的使用
关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用. //形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun ...
- C++中函数指针的使用
A function pointer is a variable that stores the address of a function that can later be called thro ...
- STC15分时内核中函数指针的使用问题
2019独角兽企业重金招聘Python工程师标准>>> 基于前后台设计的系统随着功能的递增变得越来越难以维护, 所以决定为STC15F2K单片机编写一个基于时分的非抢占式内核,方便进 ...
- C++中函数指针的运用
/** class_pointer.cxx** Created on: 2012-9-15* Author: Jesse Meng*/#include <iostream> using n ...
- 【C/C 】浅谈C/C 中函数指针与回调函数
01.函数指针 1.1.函数指针定义 一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似.我们可以把函数的这个首地址(或称入口地址)赋予 ...
- C++ 类中函数指针的使用
文章目录 函数指针用法 类中的成员函数接收函数指针 情况1 情况2 情况3 总结 函数指针用法 函数指针可以作为一个函数的参数,传不同的函数指针给这个函数就可以让其实现不能的功能.从而我们可以复用这个 ...
最新文章
- 常用网站--前端开发类+网页设计类+平面素材类+flash类
- 关于actionbar的drawerlayout
- 《白鹿原》金句摘抄(三)
- Maximum Flow(2017 ACM-ICPC 亚洲区(西安赛区)网络赛 E)
- 循环结构格式 java
- Froala 编辑器设置表格页脚
- pdm怎么导入oracle,PowerDesigner导入导出PDM和rtf文件
- vue组件库开发(npm包发布)
- 混沌大学--喜茶模式拷贝指南
- mysql.sock文件的作用
- yaml参数文件的使用
- Photoshop脚本 合并所有图层
- 公共厕所女性如厕难,厕所革命刻不容缓
- 测绘——如何在win10环境下安装CAD2006+CASS7.0
- C语言合法标识符(含知识点)
- LiteOS 学习第一篇
- 普通二本,学这些东西,也能进大厂
- java gif 帧_修复Java中动画gif的帧频
- oracle 数据库ceil,Oracle数据库中ceil函数的操作方案
- 第一期挖矿大赛进展如何?——Nervos 双周报第十二期
热门文章
- Oracle的select语句进阶和函数
- 微型计算机原理及应用考研试题,计算机考研必备微型计算机原理及应用试题精选...
- 单片微型计算机原理及应用第三版,单片微型计算机原理及应用 课后习题答案 山东理工...
- ionic android升级错误 exposed beyond app through Intent.getData()
- C语言小游戏----俄罗斯方块
- 上传excel表格批量插入到数据库
- 广告公司内部流出版:互联网广告作弊的十八般武艺
- Restlet官方指南
- android debug 签名,Android debug签名和release签名
- 制作一个Java即时翻译器——网页抓取调用百度翻译API