天天看點

*(int*)&p

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的調用。

繼續閱讀