3 回答

TA貢獻2036條經驗 獲得超8個贊
#include <stdio.h>
void function1()
{
printf("bt!\n");
}
void (*p)();
void * Function()
{
void (*q)() = function1;
return q;
}
int main()
{
*(int*)&p=(int)Function();
p();
}

TA貢獻1891條經驗 獲得超3個贊
Function()是干什么?執行Function函數,該函數的返回值是什么?天知道!
但是(int)將函數執行的結果轉換為了整形。
我們先拋開p的原始類型不談,看表達式*(int*)&p,首先將變量p的首地址轉換為整型指針,然后對其求其指向的內容,最后的結果就是將p變量首地址開始的存儲空間被視為一個int整數。后面的代碼就是把一個int整數寫入到p的首地址開始的一個int型變量應該占用的空間內。
然后再看p,p是函數指針變量,最后的結果就是Function()執行后的結果,被存放到了p變量開始的一個int整型的空間內。我們考慮指針和整型的空間大小一樣,如果Function()的返回是一個函數指針,那這里就沒有信息丟失和轉換。最后p()調用函數。
這個轉換過程的結果就是,不管Function返回的是什么,都把這個返回值做為一個“void (*p)()”類型的函數來對待,并調用這個函數。
注意Function()函數的指針是Function,而不是Function()。
- 3 回答
- 0 關注
- 1207 瀏覽
添加回答
舉報