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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

知道為什么自己的結(jié)果和視頻不一樣了。視頻里應(yīng)該是有問題的吧?

自己的輸出結(jié)果,跟很多底下評(píng)論的同學(xué)一樣,跟視頻里的是不一樣的:

$?./a.out?
*p?=?3
*p?=?1
*p?=?2
*p?=?1384734840
*p?=?32766
*p?=?5
----------------------------------------------------
p[0]?=?3
p[1]?=?1
p[2]?=?2
p[3]?=?1384734828
p[4]?=?32766
p[5]?=?5


在gdb里,輸出了一下所有變量的地址,知道了原因是「指針p」本身占據(jù)了整型變量之間的地址位,所以輸出的結(jié)果和視頻里不一樣,不是連續(xù)的,而是出現(xiàn)了隨機(jī)數(shù)。在64位操作系統(tǒng)里,指針p本身占據(jù)8個(gè)字節(jié)。我這里的gdb的結(jié)果如下:

(gdb)?p?a
$1?=?3
(gdb)?p?&a
$2?=?(int?*)?0x7fffffffdabc
(gdb)?p?b
$3?=?2
(gdb)?p?&b
$4?=?(int?*)?0x7fffffffdac4
(gdb)?p??i
$5?=?0
(gdb)?p?&i
$6?=?(int?*)?0x7fffffffdac0
(gdb)?p?p
$7?=?(int?*)?0x7fffffffdac0
(gdb)?p?&p
$8?=?(int?**)?0x7fffffffdac8
(gdb)?p?array[0]
$9?=?5
(gdb)?p?&array[0]
$10?=?(int?*)?0x7fffffffdad0
(gdb)?p?array[1]
$11?=?50
(gdb)?p?&array[1]
$12?=?(int?*)?0x7fffffffdad4
(gdb)?p?array[2]
$13?=?500
(gdb)?p?&array[2]
$14?=?(int?*)?0x7fffffffdad8

所以,再回頭去看程序的輸出,就可以知道:

第一行輸出的p[0]=3,這是變量a的值,沒有疑問;
第二行輸出的p[1]=1,這是變量i的值,沒有疑問;
第三行輸出的p[2]=2,這是變量b的值,沒有疑問;
第四行輸出的p[3]=1384734840,這是指針變量p本身所在位置的前4個(gè)字節(jié)的值,因?yàn)闆]有被初始化過,所以是系統(tǒng)隨機(jī)給的數(shù);
第五行輸出的p[4]=32766,這是指針變量p本身所在位置的后4個(gè)字節(jié)的值,因?yàn)闆]有被初始化過,所以是系統(tǒng)隨機(jī)給的數(shù);
第六行輸出的p[5]=5,這是數(shù)組array[0]的值,沒有疑問。

綜上所述,編譯器編譯程序時(shí),正如之前老師講過的,會(huì)自動(dòng)優(yōu)化內(nèi)存分配,把同類型的變量分配到一段連續(xù)的內(nèi)存里,所以這里就把所有的整型變量都挨個(gè)分配在一起了,只不過順序并不是我們想象的那樣從a到b到array到i到指針p本身,而是把變量i和指針p本身插到了a、b、array的中間,所以程序代碼從a的地址開始順序輸出的時(shí)候,沒有得到期望的結(jié)果。


正在回答

1 回答

這個(gè)要看編譯器的,老師講的內(nèi)容,其實(shí)數(shù)組已經(jīng)越界,在實(shí)際使用中不會(huì)出現(xiàn)的,如果實(shí)際應(yīng)用中出現(xiàn)說明程序有問題。

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

知道為什么自己的結(jié)果和視頻不一樣了。視頻里應(yīng)該是有問題的吧?

我要回答 關(guān)注問題
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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