我正在试图弄清楚以下C语言代码的作用:
((void(*)())buf)();
'buf'是一个char
数组。
我正在试图弄清楚以下C语言代码的作用:
((void(*)())buf)();
'buf'是一个char
数组。
让我们一步一步来。
void(*)()
这是一个指向函数的指针,该函数接受未指定参数且没有返回值。
(void(*)())buf
将buf简单地转换为这个函数指针类型。最后,
((void(*)())buf)();
调用这个函数。
因此,整个语句的意思是“将buf
解释为一个不带参数的void
函数指针,并调用该函数。”
void(*)()
就是这样的声明。 - pmgbuf
转换为类型为void(*)()
的函数指针(返回void且参数未指定的函数),并调用它。char *buf = (char *)function;
或类似的操作。 - Wernseychar*
到 void(*)()
的转换是没有意义的。 - Wernsey当我遇到令人费解的声明时,我倾向于使用 "cdecl" 命令。例如:
[me@machine]$ cdecl
Type `help' or `?' for help
cdecl> explain (void(*)())buf
cast buf into pointer to function returning void
虽然有些情况下我希望有一个工具能解释 "cdecl" 的输出 :/
这将buf
强制转换为void (*)()
类型,即一个不确定参数且返回空值的函数指针。然后它在该地址调用该函数(最右边的两个括号)。
它将buf
转换为一个函数指针,该指针接受未指定的参数并调用它。