(*(void (*)())0)();
上述語句,用於模擬計算機啟動時,呼叫在硬體位址為 0 的子程式之 C 語句。
解析如下:
- 函式指標的定義為:(type) (*Funcp)(),即 Funcp 為函式指標,則(*Funcp)() 為呼叫函式指標的方式
- 程式需要模擬硬體地址 0,因此這裡將 Funcp 替換為 0,則為 (*0)() 形式。這裡假如 0 為函式指標
- * 是指標表達形式,而 0 只是一個常量,不是指標,因此形如 (*0) 並不能生效。在這裡,0 如果能被轉化為函示指標,那麼(*0) 就相當於呼叫實際的地址
- 關於強制轉換:1、 void (*f)() 表示f指向一個返回值為 void 的函式指標;2、 那麼,(void (*)()) 就為一個“指向一個返回值為 void 的函式指標”的型別轉換符
- 將常量 0 通過 (void (*)()) 型別轉換符強制轉換為函式指標,這樣就可以完全使用 (void (*)())0 來替換 Funcp,最終表示式為 (*(void (*)())0)()
例子:
#include <stdio.h> #include <stdlib.h> typedef void (*pF)(void);//pF = pointer function void tF(void);//tF = test function int main() { pF f1 = tF;//也可以寫成 pF f1 = &tF (*f1)(); f1(); return 0; } void tF(void) { printf("%s\n", "Hello World!!!"); }
輸出:
Hello World!!! Hello World!!!