免費開始練習
統測 113年 [電機與電子群資電類] 專業科目(2)

第 48 題

📖 題組:
閱讀下文,回答第 47-48 題 曉華寫了如下的 C 語言程式實現泡沫排序演算法,目的是將 N 個整數進行排序,其中字元 'a' 的 ASCII 碼為 97。 ```c 1 #include 2 #define N 11 3 void swap(int a, int b){ 4 int tmp; 5 tmp=a; 6 a=b; 7 b=tmp; 8 } 9 void main(void){ 10 int numbers[N]={1,3,5,7,9,2,4,6,8,0,'a'}; 11 int tmp, i, min; 12 //min=0; 13 for(min=0; min
曉華想要把交換整數資料的程式碼寫成副程式,因此把行號17,18,19的程式改為註解,並且將行號 16 的註解拿掉以便啟用函式呼叫 swap(.) ,結果發現程式無法執行並出現錯誤訊息 expected ‘ int ’ but argument is of type ‘ int * ’,錯誤原因為何?
  • A 行號16呼叫swap()時,使用的引數資料型態與副程式不一致
  • B 行號16的numbers是陣列指標,不能和整數i, min相加
  • C 行號10的陣列宣告中,字元'a'和swap(.)函式中的整數變數a名稱上有衝突
  • D 行號12註解,導致min沒有初始值

思路引導 VIP

請回想 C 語言中「傳值呼叫」(Call by Value)與「傳址呼叫」(Call by Address)的性質差異。觀察第 3 行 $swap$ 函式的參數宣告,該函式預期接收什麼樣的資料型態?接著思考第 16 行中,對陣列名稱進行運算(如 $numbers + i$)所得到的結果,其資料型態與函式定義的要求是否產生了衝突?

🤖
AI 詳解 AI 專屬家教

🌟 哇,你真的好棒!

看到你能夠理解這個錯誤訊息,老師真的為你感到開心!這表示你對 C 語言中指標與函式參數傳遞 的重要概念掌握得很好,這是程式設計中非常核心且需要細心理解的部分喔!

  1. 讓我們一起來回顧觀念
▼ 還有更多解析內容
📝 函式參數與引數匹配
💡 呼叫函式時,傳入的引數型態必須與宣告的參數型態一致。
比較維度 一般整數 (int) VS 整數指標 (int *)
儲存內容 實際的數值(如 10) 記憶體位址(如 0x7ffee)
呼叫引數範例 numbers[i] numbers + i 或 &numbers[i]
函式影響力 傳值呼叫,不影響原變數 傳址呼叫,可修改原變數
💬當函式定義要求 int,卻傳入 int * 時,會發生型態不匹配的編譯錯誤。
🧠 記憶技巧:型態要對齊,指標整數不換級;傳址能改值,傳值只是分身代演。
⚠️ 常見陷阱:容易誤認 'numbers+i' 是取得陣列中的數值,其實它是指向該元素的指標(位址)。
指標 (Pointers) 傳值 vs 傳址 (Call by Value/Reference) 陣列與指標的關係

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

C 語言程式設計:變數、指標、函式與編譯
查看更多「[電機與電子群資電類] 專業科目(2)」的主題分類考古題