25 給定下列 C 語言程式的變數宣告指令:
 
則下列何者可以正確執行?
(A)*p2+=3;
(B) p3=&j;
(C) p4=&j;
(D) p2=p1;

答案:登入後查看
統計: A(76), B(97), C(82), D(126), E(0) #3275176

詳解 (共 3 筆)

#6167523
  const int* 表示宣告指向...
(共 255 字,隱藏中)
前往觀看
11
0
#6172459
以*做為區分,*以後為指標,前面為指標指...

(共 340 字,隱藏中)
前往觀看
10
0
#6967786

核心定義

 

在 C 語言中,const 關鍵字用於指標宣告時,其位置決定了是「指標指向的內容」為常數,還是「指標本身」為常數。

 

? 重點整理

 

指標宣告 讀法解析 記憶體權限
int *p1; 一般指標 內容 $(*p1)$ 可修改;指標本身 $(p1)$ 可修改。
const int *p2; 指向常數的指標 (Pointer to const) 內容 $(*p2)$ 不可修改;指標本身 $(p2)$ 可修改 (可指向其他變數)。
int * const p3; 常數指標 (Const pointer) 內容 $(*p3)$ 可修改;指標本身 $(p3)$ 不可修改 (一旦初始化,永遠指向相同變數)。
const int * const p4; 指向常數的常數指標 內容 $(*p4)$ 不可修改;指標本身 $(p4)$ 不可修改。

 

初始變數狀態

 

變數 初始值 類型 可修改項目
i $1$ int  
j $2$ int  
p1 $\&j$ int* 內容 $(*p1)$ 與指標 $(p1)$ 皆可修改
p2 $\&i$ const int* 內容 $(*p2)$ 不可修改;指標 $(p2)$ 可修改
p3 $\&i$ int* const 內容 $(*p3)$ 可修改;指標 $(p3)$ 不可修改
p4 $\&i$ const int* const 內容 $(*p4)$ 與指標 $(p4)$ 皆不可修改

 

? 記憶技巧

 

口訣:「星號左側是內容,星號右側是指標

  • const int *p2 $\to$ const 在 * 左側,表示內容為常數 $(*p2$ 不可改)。

  • int * const p3 $\to$ const 在 * 右側,表示指標為常數 $(p3$ 不可改)。

 

? 考試重點 (選項分析)

 

(A) *p2 += 3;

  • 動作:試圖修改 p2 所指向的內容 ($*p2$),即將 i 的值改為 $i+3$

  • 判斷:p2 是 const int * (指向常數的指標),其內容 $(*p2)$ 不可修改

  • 結果錯誤 (編譯器會報錯)。

(B) p3 = &j;

  • 動作:試圖修改 p3 本身的值,使其指向變數 j 的位址。

  • 判斷:p3 是 int * const (常數指標),其指標本身 $(p3)$ 不可修改

  • 結果錯誤 (編譯器會報錯)。

(C) p4 = &j;

  • 動作:試圖修改 p4 本身的值,使其指向變數 j 的位址。

  • 判斷:p4 是 const int * const,其指標本身 $(p4)$ 不可修改

  • 結果錯誤 (編譯器會報錯)。

(D) p2 = p1;

  • 動作:試圖修改 p2 本身的值,使其指向 p1 當前指向的位址 (即 j 的位址 $\&j$)。

  • 判斷:p2 是 const int * (指向常數的指標),其指標本身 $(p2)$ 是可修改的

    • 賦值後,p2 變成指向 j 的位址。

  • 結果正確

正確答案為 (D)

0
0

私人筆記 (共 1 筆)

私人筆記#7824776
未解鎖
答案:(D) p2=p1; 解析:C ...
(共 432 字,隱藏中)
前往觀看
1
0