用typedef定义两种类型
typedef void (*func_p)(char *name); //定义函数指针类型typedef void func_t(char *name); //定义函数类型平时用的更多的是函数指针类型,比如作为函数参数传入回调函数等等。实际上函数类型也是可以作为函数的参数进行传递的。
函数指针和函数类型变量使用的不同:
/*定义一个函数指针类型,一个函数类型,参数一样*/typedef void (*func_p)(char *name); //定义函数指针类型typedef void func_t(char *name); //定义函数类型/*定义参数匹配的函数*/void func_callback(char *name){ printf(hello,%sn,name);}int main(){ func_p f1=func_callback; func_t *f2=func_callback; f1(aaa); f2(bbb);}执行结果
hello,aaahello,bbb从上面可以看出来函数指针类型和函数类型变量在使用上的区别。
func_p就是函数指针类型,所以定义的f1也就是一个函数指针,可以直接等于函数名称func_t 是函数类型,所以它定义的变量要加上*,这样f2才是一个函数指针,才能把函数名称赋值给它函数名称和&函数名称
上面f1=func_callback;是我们在程序里面大多数的写法。但是经过测试,f1=&func_callback;竟然也是可以的,最终函数执行结果也是一样的。
所以我又抱着怀疑的态度写下了如下的代码:
int main(){ func_p f1=func_callback; func_t *f2=func_callback; if(func_callback==&func_callback) { printf(============n); } f1(aaa); f2(bbb);}执行结果为:
============hello,aaahello,bbb可以得出结论:函数名称=&函数名称。也就是函数名称比如func_callback本身是一个函数指针,前面加上一个&求地址符号后&func_callback 还是一个函数指针。
那对于调用函数的写法下面的也是等效的:
(*f1)(aaa);(*f2)(bbb);函数指针类型,函数类型作为参数
把一个回调函数传递进另外一个函数,通常都会通过函数指针参数的形式进行传递
typedef void (*func_p)(char *name); //定义函数指针类型typedef void func_t(char *name); //定义函数类型/*定义回调函数*/void func_callback(char *name){ printf(hello,%sn,name);}/*定义函数,函数指针类型作为参数*/void run_p(func_p fp,char *name){ fp(name);}/*定义函数,函数类型作为参数*/void run_t(func_t ft,char *name){ ft(name);}int main(){ run_p(func_callback,pp); run_t(func_callback,tt);}运行结果为:
hello,pphello,tt得到这样的运行结果估计要惊讶很多人,我没做这个实验之前也觉得应该编译的时候就会出问题。func_t 本身是函数的类型,而传递进行的func_callback又是一个函数指针,按正常来说这里会类型不一致。
这里可能编译器会帮忙做一些处理,所以也不去深究为什么了,不过还是要记住这种不寻常的易忽略的地方。
如果我们自己写代码,还是尽量使用函数指针作为参数进行传递。
让ChatGPT写一个内核模块
工业互联网平台能够实现数字化重塑的思考
索尼精神再展现!索尼新品4K电视为你带来更好的试听体验
运放电路—虚短虚断介绍
关于ETAS和LABCAR系统
函数类型和函数指针类型的区别
直线模组3D打印帮助解决三叉痛
贴片电阻上数字的含义,你知道吗?
使用HAL库进行电机测速滤波
苹果发WWDC邀请函,10.5英寸的iPad Pro面世?
英特尔10nm处理器Windows 10任务管理器出现识别错误
关于RFID抗金属标签打印机的简介
iphone8什么时候上市?iphone8最新消息:苹果home键终于消失了,这次是iPad,iPhone8快了
图解直流电机,直流电机电机结构模型与纵向剖视图图解
高速自动测试设备的未来
DIY一种基于人工智能传感器的烟雾检测系统
国网安徽电力完成古泉换5G信号全覆盖,实现通信智能化运维
熊猫·陌果科技亮相中国水协2022/2023年会暨城镇水务技术与产品展示
折叠屏的出现打破了原有的人机交互形式
小米6之后,小米又来两款新机小米X1、红米pro2或将挑起手机市场腥风血雨