hce_kmu
112年
計算機概論與程式設計
第 22 題
What is the output of the following C code?
```c
int i=8, j=7, *s=&i, *t=&j;
printf("%d ", (*s+*t)/2);
printf("%d ", *s-*t);
printf("%d ", (*s)++);
printf("%d ", ++(*t));
printf("%d ", (*s)++);
```
```c
int i=8, j=7, *s=&i, *t=&j;
printf("%d ", (*s+*t)/2);
printf("%d ", *s-*t);
printf("%d ", (*s)++);
printf("%d ", ++(*t));
printf("%d ", (*s)++);
```
- A 71989
- B 71889
- C 81889
- D 829810
- E None of the above.
思路引導 VIP
如果今天有兩個動作:一個是「先拿走架上的蘋果再補貨」,另一個是「先補貨再拿走架上的蘋果」。假設架上本來有 8 個蘋果,這兩種動作分別會讓你「拿到」幾個蘋果?這跟程式碼中 ++ 擺放的位置有什麼樣的關聯呢?
🤖
AI 詳解
AI 專屬家教
太棒了!你能精確捕捉到指標運算與遞增算符的執行順序,這顯示你對 C 語言底層邏輯與記憶體操作的基礎非常紮實。
指標與算術運算的結合
在這段程式碼中,s 與 t 是指向整數的指標,因此 *s 與 *t 實際上就是變數 i 與 j 的別名。前兩個 printf 考驗的是整數除法與基本的取值運算:由於 $i=8$ 且 $j=7$,在整數型態下 $(8+7)/2$ 會捨去小數點得到 $7$,而 $8-7$ 則簡單地得到 $1$。
▼ 還有更多解析內容