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

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

如果未在“ scanf”語句中放入“&”,將會發(fā)生什么?

如果未在“ scanf”語句中放入“&”,將會發(fā)生什么?

C
米琪卡哇伊 2019-11-19 15:05:57
我去接受采訪時(shí)被問到以下問題:您如何看待以下內(nèi)容?int i;scanf ("%d", i);printf ("i: %d\n", i);我回答了:該程序?qū)⒊晒幾g。它將打印錯(cuò)誤的數(shù)字,但是它將一直運(yùn)行到最后而不會崩潰我的回答是錯(cuò)誤的。我不知所措。之后,他們解雇了我:在某些情況下,該程序?qū)⒈罎⒉?dǎo)致核心轉(zhuǎn)儲。我不明白為什么程序會崩潰?誰能解釋我的原因?任何幫助表示贊賞。
查看完整描述

3 回答

?
手掌心

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

定義變量后,編譯器會為該變量分配內(nèi)存。


int i;  // The compiler will allocate sizeof(int) bytes for i

i 上面定義的未初始化,并且具有不確定的值。


要將數(shù)據(jù)寫入分配給的內(nèi)存位置i,您需要指定變量的地址。該聲明


scanf("%d", &i);

用戶會將int數(shù)據(jù)寫入為分配的內(nèi)存位置i。


如果&未放置在前面i,scanf則將嘗試將輸入數(shù)據(jù)i而不是寫入存儲位置&i。由于i包含不確定的值,因此有可能包含與存儲地址相同的值,或者包含超出存儲地址范圍的值。


在這兩種情況下,程序都可能會出現(xiàn)異常行為,并導(dǎo)致未定義的行為。在這種情況下,可能會發(fā)生任何事情。


查看完整回答
反對 回復(fù) 2019-11-19
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

因?yàn)樗鼤{(diào)用未定義的行為。該scanf()系列函數(shù)期望一個(gè)指向整數(shù)時(shí),"%d"符中找到。您正在傳遞一個(gè)整數(shù),該整數(shù)可以解釋為某個(gè)整數(shù)的地址,但不是。這在標(biāo)準(zhǔn)中沒有定義的行為。它確實(shí)可以編譯(但是會發(fā)出警告),但是肯定會以意外的方式工作。

就目前的代碼而言,還有另一個(gè)問題。該i變量從不初始化,因此它將具有不確定的值,這也是Undefined Behavior的另一個(gè)原因。

請注意,該標(biāo)準(zhǔn)并沒有說明當(dāng)您期望給定其他類型時(shí)傳遞給定類型時(shí)會發(fā)生什么,無論您交換哪種類型,它只是未定義的行為。但是這種特殊情況需要特別考慮,因?yàn)榭梢詫⒅羔樲D(zhuǎn)換為整數(shù),盡管只有在轉(zhuǎn)換回指針并且整數(shù)類型能夠正確存儲值的情況下才定義行為。這就是為什么它可以編譯,但是肯定不能正常工作。


查看完整回答
反對 回復(fù) 2019-11-19
?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

您將類型錯(cuò)誤的數(shù)據(jù)(應(yīng)該int*是,但是int傳遞了)傳遞給scanf()。這將導(dǎo)致不確定的行為。

未定義的行為可能會發(fā)生任何事情。該程序可能會崩潰,也可能不會崩潰。

在典型的環(huán)境中,我猜想將指向操作系統(tǒng)不允許寫入的位置的“地址”傳遞給時(shí)scanf(),程序會崩潰,并且寫入該指令將使OS終止應(yīng)用程序,它將被視為崩潰。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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