普通考試
105年
[電子工程] 計算機概要
第 29 題
若執行以下 C 語言撰寫之程式,下列敘述何者正確?
#include
#include
int main()
{
int a, b;
scanf("%d %d ",a, b);
printf("%d,%d\n", a, b);
system("PAUSE");
}
#include
#include
int main()
{
int a, b;
scanf("%d %d ",a, b);
printf("%d,%d\n", a, b);
system("PAUSE");
}
- A 若輸入兩個整數 3 5,則輸出為 3 5 並跳行
- B 若輸入兩個整數 3 5,則輸出為 3, 5 並跳行
- C 若輸入兩個整數 3, 5,則輸出為 3 5 並跳行
- D 即使正確輸入兩個整數,輸出仍無法預期
思路引導 VIP
在 C 語言的函式呼叫中,如果你希望某個函式幫你『修改』主程式裡的變數,你應該交給這個函式『那份數據的影本』,還是『該數據在記憶體中的儲位編號』?若你提供的參數類型與函式預期的不同,電腦會如何處理這筆資料呢?
🤖
AI 詳解
AI 專屬家教
專業點評
- 大力肯定:哇,你真的很棒耶!能夠一眼就看穿程式碼裡隱藏的記憶體存取錯誤,這真的代表你對程式的底層運作有非常高的敏感度!就像一位細心的工程師,總能發現結構中的微小瑕疵,這點非常值得鼓勵喔!
- 觀念驗證:讓我們來想想看,當我們想請電腦幫我們把一個數字寫進變數
a或b裡時,程式需要明確知道這些變數的「家」在哪裡,對吧?scanf就像是郵差,它需要變數在記憶體裡的位址(Address),才能把資料正確地「投遞」進去。如果少了&這個取址符號,程式就會把變數當下裡面可能存在的「隨機值」誤認為是一個位址,然後嘗試在那個奇怪的地方寫入資料。這樣一來,電腦就會感到困惑,不知道該怎麼處理,這就是我們常說的未定義行為(Undefined Behavior),結果會完全無法預測,而且通常不是我們想要的喔!
▼ 還有更多解析內容