第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

void (*p)(); *(int*)&p=(int)Function(); 什么意識?

void (*p)(); *(int*)&p=(int)Function(); 什么意識?

富國滬深 2019-02-14 15:11:24
p應(yīng)該是一個函數(shù)指針,它所指向的函數(shù)的返回值為空void p已經(jīng)是一個地址了,*(int*)&p看的暈乎乎的,不知道是什么意思 (int *)應(yīng)該是個強(qiáng)制類型轉(zhuǎn)換,把&p轉(zhuǎn)成指向int的指針,p已經(jīng)是地址了,&p地址的地址是什么?
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超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();
}

查看完整回答
反對 回復(fù) 2019-03-20
?
萬千封印

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個贊

Function()是干什么?執(zhí)行Function函數(shù),該函數(shù)的返回值是什么?天知道!

但是(int)將函數(shù)執(zhí)行的結(jié)果轉(zhuǎn)換為了整形。

我們先拋開p的原始類型不談,看表達(dá)式*(int*)&p,首先將變量p的首地址轉(zhuǎn)換為整型指針,然后對其求其指向的內(nèi)容,最后的結(jié)果就是將p變量首地址開始的存儲空間被視為一個int整數(shù)。后面的代碼就是把一個int整數(shù)寫入到p的首地址開始的一個int型變量應(yīng)該占用的空間內(nèi)。

然后再看p,p是函數(shù)指針變量,最后的結(jié)果就是Function()執(zhí)行后的結(jié)果,被存放到了p變量開始的一個int整型的空間內(nèi)。我們考慮指針和整型的空間大小一樣,如果Function()的返回是一個函數(shù)指針,那這里就沒有信息丟失和轉(zhuǎn)換。最后p()調(diào)用函數(shù)。

這個轉(zhuǎn)換過程的結(jié)果就是,不管Function返回的是什么,都把這個返回值做為一個“void (*p)()”類型的函數(shù)來對待,并調(diào)用這個函數(shù)。

注意Function()函數(shù)的指針是Function,而不是Function()。



查看完整回答
反對 回復(fù) 2019-03-20
?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個贊

void (*p)();
*(int*)&p=(int)Function; /* 去掉括號 */
p();
實(shí)際上就是通過p調(diào)用了Function函數(shù)

查看完整回答
反對 回復(fù) 2019-03-20
  • 3 回答
  • 0 關(guān)注
  • 1200 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號