c语言函数指针和指针函数的区别,以及回调函数的使用。

函数指针是什么,函数指针本质也是指针,不过是指向函数的指针,存储的是函数的地址。

指针函数是什么,指针函数其实就是返回值是指针的函数,本质是函数。

函数指针是如何定义的呢,如下

cpp 复制代码
void (*pfun)(int a,int b)

这里 * pfun 需要加括号,否则定义为了指针函数。

指针函数的定义如下:

cpp 复制代码
void *pfun(int a,int b);

下面利用函数指针实现回调函数

首先我们利用结构体存储一个函数指针类型

cpp 复制代码
typedef struct
{
	void (*p)(int,int);
}p_fun;

这个函数指针是指向一个 返回值是void ,二个参数都是int 类型的函数。下面我们定义一个此类型的函数。

cpp 复制代码
void  printf_fun(int a,int b)
{
	printf("%d,%d",a,b);
}

我们此时可以写一个回调函数,如下:

cpp 复制代码
void callback(int a,int b,void(*p_test)(int,int))
{
	
    p_test(a,b);
  	
}

最后我们在main函数中调用

cpp 复制代码
int main(void )
{ 
  p_fun  para;//定义出结构体变量
  para.p=printf_fun; // 函数指针指向函数。函数名就说地址
  
  callback(3,5,para.p);//调用回调函数。
//注意:本质上传递的都是地址。所以传递的时候并不能传递参数,

 
}

运行结果:

你们看懂了吗?没看懂多看几遍!!!

相关推荐
疯狂的挖掘机2 小时前
记一次基于QT的图片操作处理优化思路(包括在图上放大缩小,截图,画线,取值等)
开发语言·数据库·qt
YGGP2 小时前
【Golang】LeetCode 64. 最小路径和
算法·leetcode
cnxy1882 小时前
围棋对弈Python程序开发完整指南:步骤4 - 提子逻辑和劫争规则实现
开发语言·python·机器学习
意趣新2 小时前
C 语言源文件从编写完成到最终生成可执行文件的完整、详细过程
c语言·开发语言
李艺为3 小时前
根据apk包名动态修改Android品牌与型号
android·开发语言
古城小栈3 小时前
Rust变量设计核心:默认不可变与mut显式可变的深层逻辑
算法·rust
电商API&Tina3 小时前
跨境电商 API 对接指南:亚马逊 + 速卖通接口调用全流程
大数据·服务器·数据库·python·算法·json·图搜索算法
黄河滴滴3 小时前
java系统变卡变慢的原因是什么?从oom的角度分析
java·开发语言
LYFlied3 小时前
【每日算法】LeetCode 1143. 最长公共子序列
前端·算法·leetcode·职场和发展·动态规划
老华带你飞4 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端