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中函数指针的基本语法和思想相关推荐

  1. 关于C++中函数指针的使用(包含对typedef用法的讨论)

    关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用. //形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(in ...

  2. C/C++中函数指针的含义(转)

                                 C/C++中函数指针的含义 函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢?如果我们有一个int test(int a ...

  3. C++中函数指针数组的使用

    C++中函数指针数组的使用 来源:电脑教程在线(http://www.linuxdiyf.com/1/) 作者:linux 原文:C++中函数指针数组的使用(http://www.linuxdiyf. ...

  4. 关于C++中函数指针的使用

    关于C++中函数指针的使用(包含对typedef用法的讨论)  (一)简单的函数指针的应用. //形式1:返回类型(*函数名)(参数表)  char (*pFun)(int);  char glFun ...

  5. C++中函数指针的使用

    A function pointer is a variable that stores the address of a function that can later be called thro ...

  6. STC15分时内核中函数指针的使用问题

    2019独角兽企业重金招聘Python工程师标准>>> 基于前后台设计的系统随着功能的递增变得越来越难以维护, 所以决定为STC15F2K单片机编写一个基于时分的非抢占式内核,方便进 ...

  7. C++中函数指针的运用

    /** class_pointer.cxx** Created on: 2012-9-15* Author: Jesse Meng*/#include <iostream> using n ...

  8. 【C/C 】浅谈C/C 中函数指针与回调函数

    01.函数指针 1.1.函数指针定义 一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似.我们可以把函数的这个首地址(或称入口地址)赋予 ...

  9. C++ 类中函数指针的使用

    文章目录 函数指针用法 类中的成员函数接收函数指针 情况1 情况2 情况3 总结 函数指针用法 函数指针可以作为一个函数的参数,传不同的函数指针给这个函数就可以让其实现不能的功能.从而我们可以复用这个 ...

最新文章

  1. 常用网站--前端开发类+网页设计类+平面素材类+flash类
  2. 关于actionbar的drawerlayout
  3. 《白鹿原》金句摘抄(三)
  4. Maximum Flow(2017 ACM-ICPC 亚洲区(西安赛区)网络赛 E)
  5. 循环结构格式 java
  6. Froala 编辑器设置表格页脚
  7. pdm怎么导入oracle,PowerDesigner导入导出PDM和rtf文件
  8. vue组件库开发(npm包发布)
  9. 混沌大学--喜茶模式拷贝指南
  10. mysql.sock文件的作用
  11. yaml参数文件的使用
  12. Photoshop脚本 合并所有图层
  13. 公共厕所女性如厕难,厕所革命刻不容缓
  14. 测绘——如何在win10环境下安装CAD2006+CASS7.0
  15. C语言合法标识符(含知识点)
  16. LiteOS 学习第一篇
  17. 普通二本,学这些东西,也能进大厂
  18. java gif 帧_修复Java中动画gif的帧频
  19. oracle 数据库ceil,Oracle数据库中ceil函数的操作方案
  20. 第一期挖矿大赛进展如何?——Nervos 双周报第十二期

热门文章

  1. Oracle的select语句进阶和函数
  2. 微型计算机原理及应用考研试题,计算机考研必备微型计算机原理及应用试题精选...
  3. 单片微型计算机原理及应用第三版,单片微型计算机原理及应用 课后习题答案 山东理工...
  4. ionic android升级错误 exposed beyond app through Intent.getData()
  5. C语言小游戏----俄罗斯方块
  6. 上传excel表格批量插入到数据库
  7. 广告公司内部流出版:互联网广告作弊的十八般武艺
  8. Restlet官方指南
  9. android debug 签名,Android debug签名和release签名
  10. 制作一个Java即时翻译器——网页抓取调用百度翻译API