函数指针

指针我们知道实际上是一个变量或者数组等的地址。如我们定义:
void *Ptr;
该指针变量可以指向我们希望指向的地址,如我们有数组为a[2] = {0,1},那么我们可以通过给指针变量赋值,使其指向该数组Ptr = a;
函数指针实际上和这种指针类似,只不过其变量类型是一个函数类型而已。如果觉得搞不明白,可以把函数类型理解为和int一样的数据类型。
如我们可以这样定义一个函数
void DataTrans(int Data, int Len)
那么同样我们可以这样定义一个函数指针
void (*DataTransPtr)(int Data,int Len)
对比函数的定义和函数指针的定义可以发现,不同的是函数指针需要在函数名前加上 * 以代表该变量是个指针变量,其余的和函数的定义一样。所以这样的话我们就可以通过赋值将函数的地址赋给函数指针,使函数指针指向该函数。
DataTransPtr = DataTrans;或者DataTransPtr = &DataTrans;两者等价。

指针变量定义时需要加 星号,使用时不需要加。使用时如果加的话便是取该地址上的值了。

函数指针数组

从上面可以看出给函数指针赋值时我们用了两种方式,其实C语言中的函数名本身代表的就是该函数的首地址。因此对于函数指针数组而言,直接使用函数名即可。
首先定义3个函数为
void FA(int a, int b); void FB(int a, int b); void FC(int a, int b);
然后定义一个同类型的函数指针
void (*FPtr)(int a, int b);
然后定义一个数组
void array[3];
对于以上的三种定义可以类比为变量的定义,类比如下
我们定义了3个变量分别为
int F1; int F2; int F3;
然后定义了一个同类型的指针变量
int F1;
然后定义了一个数组
int array_int[3];
当然我们可以把三个变量的值赋给数组array_int[0] = F1;想要赋值的话需要保证F1array_int的类型相同,例子中他们都是int型,所以可以赋值。
那么对于函数指针数组来说,如果要给函数指针数组赋值,也同样需要保证类型一致。
首先我们需要把函数指针重新做一下定义
typedef void( FPtr)(int a, int b);
这样是重新定义了一个新类型,也就是函数指针类型,可类比int
然后对数组定义
FPtr array[3];
这样数组的类型就是函数指针类型,可以通过对数组赋值完成函数的调用,如
FPtr array[] = {
FA;
FB;
FC; }

当我们需要调用函数FA时,可直接使用array[0](a, b)来调用。

v v v v v v

本文为作者原创,请勿转载,转载请联系作者。
点击下方卡片,关注我的公众号,有最新的文章和项目动态。

v v v v v v

通俗易懂的函数指针及函数指针数组相关推荐

  1. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  2. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  3. 用指针、子函数的方法去一维数组中所有元素的平均值,并放在a[0]处

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p142 7.1.2 上级实训内容 [实训内容7]用指针.子函数的方法去一维数组中所有元素的平均值,并放 ...

  4. C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态

    1,数组指针语法梳理 回顾,如何定义数组数据类型: 回顾,如何定义指针类型数组: 回顾,如何直接定义 一个指向数组类型的指针: 2,函数指针语法梳理 1)如何定义一个函数类型 2)如何定义一个函数指针 ...

  5. c/c++ 函数、常量、指针和数组的关系梳理

    压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习--无限循环中,好记性不如烂笔头--从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...

  6. 指针数组,数组指针,指针函数,函数指针,二级指针详解

    先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P: char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[ ...

  7. 【C 语言】数组 ( 多维数组做函数形参退化为指针过程 | int array[2][3] -> int array[][3] -> int (*array)[3] )

    文章目录 一.多维数组做函数形参退化为指针过程 1.使用 int array[2][3] 作函数参数 2.使用 int array[][3] 作函数参数 3.使用 int (*array)[3] 作函 ...

  8. 【C 语言】二级指针作为输入 ( 指针数组 | 将 二级指针 作为函数输入 | 抽象函数业务逻辑 )

    文章目录 一.打印 指针数组 中指针指向的字符串 二.字符串排序 三.代码示例 一.打印 指针数组 中指针指向的字符串 打印 指针数组 中指针指向的字符串 : 指针退化问题 : 传入二级指针 , 同时 ...

  9. 函数指针和函数指针数组及其应用

    1. 函数指针 先来看一个简单的例子: int a=3; void *p=&a; 这是一个基础的不能再基础的例子.相信学过指针的都能看得懂.P是一个指针,指向a.a 是一个整形变量.函数指针和 ...

  10. 指针||指针和数组||指针和函数||指针、数组、函数 案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序

    指针 指针的基本概念 指针的作用: 可以通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示 可以利用指针变量保存地址 指针变量的定义和使用 指针变量定义语法: 数据类型 * 变量名 ...

最新文章

  1. DIY穷人版谷歌眼镜,自定义手势操控,树莓派再一次被开发新玩法
  2. 如何把二进制数化成十进制数_二进制数按位进行逻辑运算
  3. 【AI初识境】如何增加深度学习模型的泛化能力​​​​​​​
  4. Tomcat源码解析一:下载源码与导入eclipse
  5. mongodb 导出txt_(干货)前端实现导出excel的功能
  6. go反射实战之数组的查找Find过滤Filter函数实现
  7. A股收盘:沪指收涨0.66% 深成指收涨1.01%
  8. Android指纹识别
  9. Lua 正确的尾调用(proper tail call)
  10. 在线JSON转CSV格式文件工具
  11. mysql存储emoji表情
  12. Idea和Eclipse快捷键对比
  13. typescript的类型转化
  14. 用Regedit命令控制注册表
  15. C/C++编程:实现hash函数
  16. android webview 炉石,从炉石传说的一个自杀OTK说起
  17. 网站突然无法访问解决方案
  18. 洛谷P4766 [CERC2014]Outer space invaders题解
  19. Lustre 监控, Grafana Dashboard
  20. 研磨设计模式之装饰模式-3(转)

热门文章

  1. 大数据毕设 - 深度学习植物识别系统(python OpenCV)
  2. python有n元人民币、其中有10元的_Python笔记-古灵阁小精灵金加隆金币兑换人民币...
  3. 小白之玩转Mac--自动切换输入法
  4. Bug消灭记:透明 png 图片加水印后变成黑问题
  5. 微信支付服务器错误,【支付问题】微信支付宝支付超时、支付异常解决办法
  6. 母牛的故事 1243ACM实验题
  7. cfdpost导出图片_CFD-POST出数据方法.pdf
  8. 20180818牛客小白月赛6.A
  9. 最方便的ICON、PNG转换工具
  10. 移动物联网项目搭建(一)——起步