1
#define START ((void (**)(int)) 0x0fff)
*START = &fun_foo();
我以前沒見過這個。這裏發生了什麼? void(**)(int)是一個函數指針嗎?這個指針符號是什麼意思?
#define START ((void (**)(int)) 0x0fff)
*START = &fun_foo();
我以前沒見過這個。這裏發生了什麼? void(**)(int)是一個函數指針嗎?這個指針符號是什麼意思?
void (**)(int)
是指向一個函數的指針,該函數需要一個int
並且不返回任何內容。
所以START
是指向函數指針的指針,而*START
是實際函數指針,它被設置爲指向fun_foo
。
在你的情況下,START
是一個指向函數指針的指針(位於固定地址0x0fff
)。
但正如我在this answer中所建議的,出於可讀性原因,您可能希望使用typedef
作爲該指向函數的簽名。