读书人

函数名转换void *该怎么解决

发布时间: 2012-06-05 13:54:06 作者: rapoo

函数名转换void *
#include<stdio.h>
void MyFunc(int x);
typedef void (*Func)(int);
void CallVoid(void *,int);
void main()
{
CallVoid((void*)&MyFunc,24);
}
void MyFunc(int x)
{
printf("参数=%d\n",x);
}
void CallVoid(void *fp,int x)
{
Func* fun=(Func *)fp;
(*fun)(x);
}
错误提示:段错误 (核心已转储)



[解决办法]
函数指针不是普通指针。

void CallVoid(void *,int);写成void CallVoid(Func,int);应该就OK
[解决办法]
一般很少 这样用,调用DLL中函数时用得多。
[解决办法]
MyFunc是函数名称,他的类型本生就是指针类型,故
CallVoid((void*)&MyFunc,24);
应改成
CallVoid((void*)&MyFunc,24);

Func 其类型就是函数的指针,Func* 表示函数指针的指针,故
Func* fun=(Func *)fp;
应 改为
Func fun=(Func )fp;

改正后的代码如下:

C/C++ code
#include<stdio.h>void MyFunc(int x);typedef void (*Func)(int);void CallVoid(void *,int);void main(){    CallVoid((void*)MyFunc,24);}void MyFunc(int x){    printf("参数=%d\n",x);}void CallVoid(void *fp,int x){    Func fun=(Func)fp;    (*fun)(x);}
[解决办法]
一点错误,应为:

MyFunc是函数名称,他的类型本生就是指针类型,故
CallVoid((void*)&MyFunc,24);
应改成
CallVoid((void*)MyFunc,24);
[解决办法]
Func* fun=(Func *)fp;

这个错了,改成
Func fun=(Func)fp;

就好了.

楼主对指针也是一塌糊涂型的, Func *fun存储了一个指针的地址, 而不是存储了一个函数的地址.
[解决办法]
6楼正解,
Func本来就是函数指针了
[解决办法]
核心已转储 \\ core dump

翻译的...

读书人网 >C语言

热点推荐