免費開始練習
普考申論題 112年 [資訊處理] 程式設計概要

第 二 題

📖 題組:
一、根據以下C程式碼,回答下列問題: 1 #include 2 void g(int *x, int *y) { 3 *x = *y - 1; 4 *y = *y - 2; 5 printf("*x = %d, *y = %d\n", *x, *y); 6 } 7 8 void f(int *z, int *w) { 9 int n = 13; 10 g(w, &n); 11 printf("*z = %d, *w = %d, n = %d\n", *z, *w, n); 12 } 13 14 int main() { 15 int i = 21; 16 int j = 5; 17 int n = 137; 18 f(&i, &j); 19 printf("print 1: i = %d, j = %d, n = %d\n", i, j, n); 20 g(&n, &n); 21 printf("print 2: i = %d, j = %d, n = %d\n", i, j, n); 22 return 0; 23 }
📝 此題為申論題,共 2 小題

小題 (二)

請問該程式碼執行後輸出的結果為何?(15分)

思路引導 VIP

看到本題,需要動手追蹤各變數的狀態與記憶體位址的綁定。特別注意三點:1. mainnfn 是不同作用域的變數。2. f 傳入 &i&j,對其取值修改會連帶影響 main 的原始變數。3. main 第20行呼叫 g(&n, &n) 時,傳入兩個相同的位址,這是典型的「別名效應(Aliasing)」,修改 *x 即等同修改 *y,必須非常小心運算順序。

🤖
AI 詳解
AI 專屬家教

【考點分析】 本題考查函式傳址呼叫(Call by reference/address)、變數生命週期與作用域(Scope),以及指標的「別名效應(Aliasing)」(多個指標指向同一位址)。 【理論/法規依據】

小題 (一)

請說明程式碼第8行至第12行中,每一行之運算子符號「*」及「&」操作所代表的意義。(10分)

思路引導 VIP

看到本題,首先要辨識出這是C語言的指標操作。接著應該分別指出在「宣告變數型別」與「執行運算子」時,符號的不同意義:宣告時的「」是定義指標變數,運算時的「&」是取址運算(Address-of),運算時的「」是提領/取值運算(Dereference)。要逐行詳細說明這兩個符號的作用目標。

🤖
AI 詳解
AI 專屬家教

【考點分析】 本題主要考查C語言中指標的基礎概念,包含指標變數之宣告、取址運算子(&)與取值/提領運算子(*)的實際應用。 【理論/法規依據】

🏷️ 相關主題

程式語言與演算法實作
查看更多「[資訊處理] 程式設計概要」的主題分類考古題