Look at following code:
void func()
{
// ...
}
int main()
{
void (*p)();
*(int*)&p = (int)func;
(*p)();
return 0;
}
分析:
void(p)();
這行代碼定義了一個指針變量p,p指向一個函數。這個函數的參數和傳回值都為void。
&p是求指針變量p本身的位址。
(int)&p表示将變量p本身的位址強制類型轉換成指向int類型的指針。
-
( int * )&p 表示取出這個指針裡面的值,就是指針p儲存的值。
(int)func表示将函數的入口位址轉換成int類型的資料。
是以* ( int * )&p = (int)func,就是将函數的入口位址複制給p。是以(*p)();就是表示對函數func的調用。