【发布时间】:2012-10-05 04:57:08
【问题描述】:
#define START ((void (**)(int)) 0x0fff)
*START = &fun_foo();
我以前没见过这个。这里发生了什么? void (**)(int) 是函数指针吗?
【问题讨论】:
标签: c
#define START ((void (**)(int)) 0x0fff)
*START = &fun_foo();
我以前没见过这个。这里发生了什么? void (**)(int) 是函数指针吗?
【问题讨论】:
标签: c
void (**)(int) 是一个指向函数的指针,该函数接受 int 并且不返回任何内容。
所以START 是指向函数指针的指针,*START 是设置为指向fun_foo 的实际函数指针。
【讨论】:
在您的情况下,START 是指向函数指针的指针(位于固定地址 0x0fff)。
但正如我在this answer 中所建议的那样,出于可读性原因,您可能希望使用typedef 作为该指向函数的签名。
【讨论】: