完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教的内容如下:
先定义一个结构体: typedef struct [ void (*CalcCRC16)(void*); void (*Check)(void*); void (*WriteoneMemory)(void*); void (*ReadMemory)(void*); void (*WriteMultiMemory)(void*); void (*SendStart)(void*); ...... ]MODBUS 然后定义一个宏: #define MODBUS_DEFAULTS [ (void(*)(void*)) ModbusCalcCRC16, (void(*)(void*)) ModbusCheck, (void(*)(void*)) ModbusWriteOneMemory, (void(*)(void*)) ModbusReadMemory, (void(*)(void*)) ModbusWriteMultiMemory, (void(*)(void*)) ModbusSendStart ] 在主程序中要将这个宏初始化给这个结构体, 请问(void(*)(void*)) 这么多的void和*, 它们的含义到底是什么啊? 如果前面的结构体是这样的,下面的初始化又要如何啊?请高手指点 typedef struct [ void (*CalcCRC16)(void); void (*Check)(void); void (*WriteoneMemory)(void); void (*ReadMemory)(void); void (*WriteMultiMemory)(void); void (*SendStart)(void); 请高手指点,谢谢! |
|
相关推荐
6 个讨论
|
|
typedef struct [
void (*CalcCRC16)(void*); void (*Check)(void*); void (*WriteoneMemory)(void*); void (*ReadMemory)(void*); void (*WriteMultiMemory)(void*); void (*SendStart)(void*); ...... ]MODBUS 里面全是函数地址。。 #define MODBUS_DEFAULTS [ (void(*)(void*)) ModbusCalcCRC16, (void(*)(void*)) ModbusCheck, (void(*)(void*)) ModbusWriteOneMemory, (void(*)(void*)) ModbusReadMemory, (void(*)(void*)) ModbusWriteMultiMemory, (void(*)(void*)) ModbusSendStart ] 将函数名(地址)强制类型转换为(void(*)(void*))型的。 初始化,将您写好的函数void (*SendStart)(void*)的名字sendstart赋值过去就可以了。 Young Hu |
|
|
|
|
|
Tutut 发表于 2018-8-20 07:36 这是C语言的问题了,估计在一些专门介绍指针的数据中会介绍。不过可以自己分析嘛。 首先,void*可以指向任何类型的数据,比如float, char等等,这样就增加了函数的灵活性。 (void(*)(void*))类型的函数,传入参数为指向任何类型数据的指针,返回参数为指向任何类型数据的指针。 举个例子 (void(*)(void*))SendStart可以这么去定义 void* SendStart(void*a) [ ....//做处理 return a; ] 调用时: int a; int *p; p=SendStart(&a); 或者 char a; char *p; p=SendStart(&a); void(*SendStart)(int,int)是错的。 Young Hu |
|
|
|
|
|
Arttronix 发表于 2018-8-20 07:46 为什么说void(*SendStart)(int,int)是错的呢,这可是函数指针的定义方法啊。后面形参只给出类型,不用参数, 前面说的参数是任意类型指针和返回值是任意类型指针我明白了,谢谢! |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
651 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
587 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1040 浏览 1 评论
716 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
514 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
148浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
115浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
119浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
116浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
158浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-18 20:17 , Processed in 0.753418 second(s), Total 54, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号