函数与指针分析、回调函数
发布日期:2021-05-08 03:06:48 浏览次数:10 分类:精选文章

本文共 1066 字,大约阅读时间需要 3 分钟。

C语言中通过typedef为函数类型重命名

typedef type name(parameter list)

例:

typedef int f(int,int);typedef void p(int);

函数指针

函数指针用于指向一个函数(指向函数体的入口地址)函数名是执行函数体的入口地址可通过函数类型定义函数指针:FuncType* pointer;也可以直接定义:type(*pointer)(parameter);-pointer为函数指针变量名-type为所指函数的返回类型-parameter list为所指函数的参数类型列表
#include
typedef int(FUNC)(int);int test(int i){ return i;}void f(){ printf("Call f()...\n");}int main(){ FUNC* pt = test;//函数名代表地址 void(*pf)() = &f;//pf指针指向无参数值、无返回值的函数(这里加不加&无所谓,都代表函数入口地址) printf("pf = %p\n",pf); printf("f = %p\n",f); printf("&f = %p\n",&f); pf();//这两种调用方法都可以 (*pf)();//同上(老式编译器) printf("Function pointer call:%d\n",pt(2)); return 0;}

为什么要动函数指针?嵌入式开发公司要用到:

面试小问题
如何使用C语言直接跳转到某个固定地址开始执行?
答:通过函数指针就可以,比如上面代码中将void (*pf)()=地址;就可以了

回调函数

回调函数是利用函数指针实现的一种调用机制回调机制原理-调用者不知道具体时间发生时需要调用的具体函数-被调函数不知道何时被调用,只知道需要完成任务-当具体时间发生时,调用者通过函数指针调用具体函数回调机制中的调用者和被调函数互不依赖

实例:

typedef int(*Weapon)(int);void fight(Weapon wp,int arg){   	int result = 0;	printf("Fight boss!\n");	result = wp(arg);	printf("Boss loss:%d\n",result);}int knife(int n){   	int ret = 0;	int i=0;	for(i=0;i
上一篇:新型类型转换
下一篇:动态内存分配、命名空间

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月24日 17时43分28秒