Tho*_*mas 21
让我们一步一步.
void(*)()
Run Code Online (Sandbox Code Playgroud)
这是一个指向函数的指针,该函数接受未指定的参数且没有返回值.
(void(*)())buf
Run Code Online (Sandbox Code Playgroud)
只需将buf转换为此函数指针类型.最后,
((void(*)())buf)();
Run Code Online (Sandbox Code Playgroud)
调用此功能.
所以整个语句"解释buf为指向void没有参数的函数的指针,并调用该函数."
它转换buf为类型的函数指针void(*)()(一个函数返回任何/ void并采用未指定的参数)并调用它.
ANSI标准实际上不允许将正常数据指针转换为函数指针,但您的平台可能允许它.
当我遇到令人难以置信的声明时,我倾向于使用"cdecl"命令.例:
[me@machine]$ cdecl
Type `help' or `?' for help
cdecl> explain (void(*)())buf
cast buf into pointer to function returning void
Run Code Online (Sandbox Code Playgroud)
虽然有些情况我希望有一个工具可以解释"cdecl"的输出:/
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |