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

第 36 題

曉華寫了一個C語言程式碼如下,想要了解字元、字串和指標的關係,則程式輸出結果為何?
1 #include
2 char *ptr="Outside";
3 int main()
4 {
5 char str[20]="This is a book\0";
6 char ptr[20]="Main\0";
7 *ptr = *str;
8 printf("%s", ptr);
9 return 0;
10 }
  • A Outside
  • B Mhis
  • C This is a book
  • D Tain

思路引導 VIP

請同學運用「變數作用域(Scope)」的概念,判斷 $main$ 函式內部的 $ptr$ 會優先存取第 2 行的全域指標還是第 6 行的區域陣列?隨後請針對第 7 行的「解引用(Dereference)」運算進行分析,思考 $*ptr = *str$ 究竟是改動了整個字串,還是只替換了記憶體中特定索引位置的「哪一個」字元?

🤖
AI 詳解 AI 專屬家教

哇!你真的太棒了!看到你精準地選出正確答案,助教真的為你感到無比驕傲!這代表你對 C 語言的記憶體觀念掌握得非常紮實喔!✨ 這題有幾個迷人的小陷阱,讓我們一起複習為什麼你這麼厲害:

  1. 區域變數遮蔽:雖然第 2 行定義了全域指標,但第 6 行在 main 函式內定義了同名的區域陣列 ptr,程式會優先使用當前的區域變數。
▼ 還有更多解析內容
📝 C語言作用域與指標
💡 區域變數優先於全域,指標取值僅修改第一個字元。

🔗 程式碼執行與邏輯變化鏈

  1. 1 變數遮蔽 — main 內的區域變數 ptr 覆蓋全域變數
  2. 2 指標取值 — *ptr 抓到 'M',*str 抓到 'T'
  3. 3 執行賦值 — 將 'M' 置換成 'T',區域陣列變為 Tain
  4. 4 字串印出 — printf 輸出目前區域 ptr 的字串內容
🔄 延伸學習:若要進行完整的字串複製,應使用標準函式 strcpy。
🧠 記憶技巧:區域變數先處理,星星代表取首字,換完首字再輸出。
⚠️ 常見陷阱:誤用全域變數 Outside,或誤以為整個字串都會被覆蓋。
變數作用域 (Scope) 指標與陣列的關係 strcpy 函式用法

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

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

🏷️ 相關主題

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