如何使用函数指针?

什么是函数指针前面一篇文章我们讲解了c/c++中关于指针的用法,但是当时局限的是对变量的指针,对函数这块并未讲解,其实函数也是有地址的。
在程序中定义一个函数,则编译时系统就会为这段代码分配一段存储空间,这段存储空间的首地址称为函数的地址,且函数名代表的就是这个地址。既然是地址就可以使用一个指针变量来存储这个地址,这个指针变量就就叫做函数指针。
函数指针变量定义方式和普通的变量指针定义方式有一定区别:
格式:
函数返回值类型 (* 指针变量名) (函数参数列表);例如:int (*p)(int,int)这段代码就定义了一个函数指针变量p,可以用来存储函数的首地址(一般直接使用函数名代替),该函数类型为带两个int形参以及返回值类型为int。
注意:
(*指针变量名)这个括号不能省略,如果写成了int *p(int,int),那就不是一个函数指针了,而是一个返回值类型为一个int型指针的函数p。
那么怎么判断一个指针变量是指向变量的指针变量还是指向函数的指针变量呢?
1.首先看变量名前面有没有“ ”,如果有“ ”说明是指针变量;2.其次看变量名的后面有没有带有形参类型的圆括号,如果有就是指向函数的指针变量,即函数指针,如果没有就是指向变量的指针变量。另外也可以使用引用的方式进行定义:
例如:int (*p)(int,int)使用int (&p)(int,int)来定义,读者可以自己去试试。
如何使用函数指针1.作为指针变量进行赋值调用 代码如下:
int max(int x, int y) { return x >= y ? x : y;}int min(int x, int y) { return x >= y ? y : x;}void extendstest::maintest(){ int a = 10, b = 20; int (*p)(int, int); p = max; cout << p(a, b) << endl; p = min; cout << p(a, b) <= y ? x : y;}int min(int x, int y) { return x >= y ? y : x;}//指针形式void func(int& a,int& b,int (*p)(int,int)) { cout << p(a, b) << endl;}//引用形式void func1(int& a, int& b, int (&p)(int, int)) { cout << p(a, b) << endl;}void extendstest::maintest(){ int a = 10, b = 20; func(a, b, max); func(a, b, min);};运行结果:2010本例中将函数指针作为另外一个函数的参数传入,在函数内部调用函数指针指向的函数,实现了一个函数内部回调的方式,写java的同学是不是很熟悉呢?
知识拓展指针是 c/c++的精华,也是 c/c++的难点,没学会指针就是没学会 c/c++。如果你觉得函数指针还能勉强接受的话,可以尝试理解一些更复杂的指针,例如:
char *(* c[1])(char **p);char (*(*(*p)(char *))[1])(char *);以上两个案例如果都能看懂的话,那么99%以上指针都难不倒你了。

基于Traefik自研的微服务网关
滤波电感的功能和工作原理
PLC如何工作?如何远程监控PLC的工作状态?
高通将在新加坡设立IC设计及技术研发中心
一二次融合柱上断路器的应用领域已越来越广
如何使用函数指针?
丰田研发自动驾驶燃料电池月球车 进军太空指日可待
东芝芯片业务超预期,第二财季运营利润增长76%
AMD处理器市场重回巅峰
小米推出微控制器AI推理引擎MACE Micro
集成运放的使用事项 集成运放的选型
基于NI CompactRIO为核心的轴承实时监测系统
宏碁笔记本电脑质保说明
一种飞秒激光二合一的舞动微型机器人加工策略
***突破之路漫长
RAID是什么,RAID如何让数据安全更有保障
大事件:昕诺飞再宣布照明产品涨价3%-9%
无线应用协议(WAP)工作原理
不断增长的存储需求推动更多NAND进入汽车设计
使用单片机和计数电路设计一个数字频率计的资料和代码概述