结构体中函数指针的问题

C语言 码拜 8年前 (2016-04-18) 1355次浏览
现在有一个头文件Clarke.h,代码如下:
结构体中函数指针的问题
源文件源文件Clarke.c(源文件#include了头文件),代码如下:
结构体中函数指针的问题
当本人把这些代码复制到VS2013中时,写了个主函数,如下:
结构体中函数指针的问题
但编译时会报错,如下:
结构体中函数指针的问题
报错的意思,本人理解的是,typedef struct 中定义的,名为CLARKE 结构体,里面有void(*calc)(  )  。这个函数指针,是没有参数的,但是用CLARKE_DEFAULTS,去初始化的时候,CLARKE_DEFAULTS里面的函数clarke_calc( ),它是有参数值的,参数为,一个指向CLARKE类型的结构体的指针,所以不能这么初始化。
于是,本人把 CLARKE 这个结构体, 改成如下:
结构体中函数指针的问题
也就是将CLARKE 结构体里定义的函数指针void(*calc)(  ),加上一个参数,变成void(*calc)( CLARKE_handle ),对于这个CLARKE_handle ,有 typedef   CLARKE * CLARKE_handle 。
但此时,编译,依旧报错,如下:
结构体中函数指针的问题
问一下这是怎么回事啊?谢谢大家
解决方案

20

void(*calc)( Uint32); // 改成这样,C和C++都是强类型语言,不符合定义编译不过

40

引用:

CLARKE *和Unit32可以通过强转来通过调用,他两的内存模型是一样的即为4字节的地址
那问一下一下,(void(*)(Uint32))clarke_calc , 是什么意思啊?
void(*)(Uint32) 是一个函数指针,指针指向参数为Uint32,无返回的函数
不同类型的指针是不能隐式转换的
在这里是做强制转换,让他转换成这种类型函数指针
正如(int)a  就是将a转换成int类型


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明结构体中函数指针的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)