Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将void*作为函数调用,而不声明函数指针_C_Function_Pointers_Void - Fatal编程技术网

C 将void*作为函数调用,而不声明函数指针

C 将void*作为函数调用,而不声明函数指针,c,function,pointers,void,C,Function,Pointers,Void,我已经搜索过了,但找不到任何结果(我的术语可能不正确),所以如果以前有人问过,请原谅我 我想知道是否有一种简单的方法可以在C语言中将void*作为函数调用,而不必先声明函数指针,然后为函数指针分配地址 即,假设要调用的函数类型为void(void) void*ptr; ptr=; ((void*())ptr)(;/*在这里调用ptr作为函数*/ 使用上面的代码,我得到错误C2066:在VC2008中强制转换到函数类型是非法的 如果这是可能的,那么对于返回类型和多个参数的函数,语法会有什么不同呢

我已经搜索过了,但找不到任何结果(我的术语可能不正确),所以如果以前有人问过,请原谅我

我想知道是否有一种简单的方法可以在C语言中将
void*
作为函数调用,而不必先声明函数指针,然后为函数指针分配地址

即,假设要调用的函数类型为
void(void)

void*ptr;
ptr=;
((void*())ptr)(;/*在这里调用ptr作为函数*/
使用上面的代码,我得到错误C2066:在VC2008中强制转换到函数类型是非法的


如果这是可能的,那么对于返回类型和多个参数的函数,语法会有什么不同呢?

当转换为函数类型时,我感到非常困惑。定义函数指针类型更容易,可读性更强:

void *ptr = ...;
typedef void (*void_f)(void);
((void_f)ptr)();
typedef void (*func_type)(void);
((func_type) ptr)();
你的演员阵容应该是:

((void (*)(void)) ptr)();
通常,通过为函数指针类型创建
typedef
,可以简化此操作:

void *ptr = ...;
typedef void (*void_f)(void);
((void_f)ptr)();
typedef void (*func_type)(void);
((func_type) ptr)();

然而,我应该指出,在标准C中,向函数指针或从函数指针强制转换普通指针(指向对象的指针)并不严格合法(尽管它是一个常见的扩展)。

在C++:

使用
reinterpret\u cast
可以为您节省一组混乱的括号,
可以清楚地将类型与调用本身区分开来