一个普通的函数指针看起来像这样:
void (*fun_ptr)(void);
不过,我曾经看到这种语法被用于将某些东西强制转换为一个void函数指针:
(void (*)(void *))
如您所见,它没有名称,只有(*)
代替名称。这是什么意思?它仅用于转换吗?
一个普通的函数指针看起来像这样:
void (*fun_ptr)(void);
不过,我曾经看到这种语法被用于将某些东西强制转换为一个void函数指针:
(void (*)(void *))
如您所见,它没有名称,只有(*)
代替名称。这是什么意思?它仅用于转换吗?
(void (*)(void *))
语法是一个强制类型转换。
转换的目标类型是一个函数指针,它接受一个void *
类型的参数,并返回void
。一个符合此转换的函数类型的示例为:
void abc(void *param);
void (*)(void *)
是一种类型。它的概念类似于int *
。它也没有与之关联的标识符。 void (*foo)(void *)
是一个具有该类型的变量foo
的声明。
强制转换表达式的形式为(<type>)<expr>
。因此,(void (*)(void *))
可以是一个强制转换运算符。
然而,这种形式不仅限于强制转换表达式。它可以在任何类型可用的地方使用。例如,在函数原型中作为参数的类型:
void bar(void (*)(void *));
这声明了一个函数bar
,它接受一个函数指针作为参数。
bar
,它以(返回void
且带有void *
参数的函数指针)作为参数。 :) - Luis Colorado
void
和带有void *
参数的函数转换成指针。你需要一个具有void *
参数的函数,而不是一个没有名称的函数。 - Luis Colorado