函数名转换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;
改正后的代码如下:
#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
翻译的...