相关疑难解决方法(0)

C函数指针转换为void指针

我试图运行以下程序,但得到一些奇怪的错误:

档案1.c:

typedef unsigned long (*FN_GET_VAL)(void);

FN_GET_VAL gfnPtr;

void setCallback(const void *fnPointer)
{
    gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
Run Code Online (Sandbox Code Playgroud)

档案2.c:

extern FN_GET_VAL gfnPtr;

unsigned long myfunc(void)
{
    return 0;
}

main()
{
   setCallback((void*)myfunc);
   gfnPtr(); /* Crashing as value was not properly 
                assigned in setCallback function */
}
Run Code Online (Sandbox Code Playgroud)

这里使用gcc编译时,gfnPtr()在64位suse linux上崩溃.但它成功调用了gfnPtr()VC6和SunOS.

但如果我改变下面给出的功能,它就能成功运行.

void setCallback(const void *fnPointer)
{
    int i; // put any statement here
    gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
Run Code Online (Sandbox Code Playgroud)

请帮助解决问题的原因.谢谢.

c pointers function-pointers

20
推荐指数
3
解决办法
2万
查看次数

标签 统计

c ×1

function-pointers ×1

pointers ×1