首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-06-05 
函数名转换void *#includestdio.hvoid MyFunc(int x)typedef void (*Func)(int)void CallVoid(void *,

函数名转换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 

翻译的...

热点排行