44. 假設 arr 是一個陣列,ptr 是指向此陣列的指標,以下哪個敘述會指向 arr 陣列的第 3 個元素的位址?
(A) *( ptr + 3 )
(B) &arr[ 3 ]
(C) arr + 3
(D) *( arr + 3 )

答案:登入後查看
統計: A(29), B(35), C(7), D(9), E(0) #3113663

詳解 (共 3 筆)

#5838547
正確答案是(B) &arr[ 3...
(共 144 字,隱藏中)
前往觀看
6
0
#6422364

在 C/C++ 語言中,陣列的索引是從 0 開始的。所以「第 3 個元素」通常指的是索引為 2 的元素 (arr[2])。然而,題目中的選項都使用了數字 3,這表明題目可能指的是索引為 3 的元素(即陣列中的第四個元素)。我們將以「指向索引為 3 的元素位址」來分析。

讓我們分析每個選項:

  • (A) *( ptr + 3 )
    (A) *( ptr + 3 )

    • ptr + 3 表示 ptr 指標向後移動 3 個其所指向型別的大小單位。如果 ptr 指向陣列的開頭,則 ptr + 3 會指向 arr[3] 的位址。
    • *() 是一個解參考運算子,它會取得該位址上的,而不是位址本身。
    • 因此,此選項會得到 arr[3] 的
  • (B) &arr[ 3 ]
    (B) &arr[ 3 ]

    • arr[ 3 ] 表示陣列 arr 中索引為 3 的元素。
    • & 是取址運算子,它會回傳其操作數的記憶體位址
    • 因此,&arr[ 3 ] 會直接取得 arr[3] 這個元素的位址
    • 此選項符合題目要求。
  • (C) arr + 3
    (C) arr + 3

    • 在 C/C++ 中,當陣列名稱(arr)單獨在表達式中使用時,它會「衰變」(decay)為指向其第一個元素(arr[0])的指標。
    • arr + 3 執行指標算術,它會計算出從陣列開頭向後數 3 個元素位置的記憶體位址。這就是 arr[3] 的位址。
    • 因此,此選項也會得到 arr[3] 的位址
  • (D) *( arr + 3 )
    (D) *( arr + 3 )

    • arr + 3 得到 arr[3] 的位址。
      arr + 3 得到 arr[3] 的地址。
    • *() 解參考該位址,會取得 arr[3] 的,而不是位址本身。
    • 因此,此選項會得到 arr[3] 的

比較 (B) 和 (C): 選項 (B) &arr[3] 和選項 (C) arr + 3 在功能上都是正確的,它們都會回傳 arr[3] 的記憶體位址。

  • &arr[3] 是一種更直接、明確地表達「取陣列中某個特定索引的元素的位址」的方式。
  • arr + 3 則利用了陣列名稱衰變為指標的特性進行指標算術來達到相同的目的。

在選擇最佳答案時,&arr[3] 通常被認為是更直接和語義上更清晰的表示,因為它明確地使用取址運算子 (&) 來取得指定索引元素的位址。

The final answer is B
最終答案是 B

0
0
#6345686

讓我們逐步分析這個問題,並找出正確答案。

問題問的是:哪個敘述會指向陣列 arr 的第 3 個元素的位址。在 C/C++ 中,陣列和指標有密切的關係,而指標運算會以元素的大小為單位進行偏移。我們假設 arr 是一個陣列,ptr 是指向這個陣列的指標(通常是指向陣列首元素的指標,即 ptr = arr),並且陣列的索引從 0 開始。因此,第 3 個元素對應的是索引 2(即 arr[2])。

現在,讓我們逐一檢視每個選項:

  • (A) *(ptr + 3)
    在這裡,ptr + 3 是一個指標運算,表示從 ptr 的當前位置偏移 3 個元素。因為 ptr 指向陣列的起始位址(arr[0]),所以 ptr + 3 會指向 arr[3] 的位址。然而,* 是解參考運算符,它會取出 ptr + 3 所指向位址的值,而不是位址本身。因此,*(ptr + 3)arr[3] 的值,而不是位址。這個選項不符合問題要求。
  • (B) &arr[3]
    arr[3] 表示陣列中第 3 個元素的值(索引為 3),而 & 是取址運算符,因此 &arr[3]arr[3] 的位址。根據陣列的定義,這正是第 3 個元素的位址(索引從 0 開始,所以第 3 個元素是 arr[2],但選項寫的是 arr[3],這在語境中應理解為題目想要第 3 個元素的位址)。這個選項直接給出了位址,符合問題要求。
  • (C) arr + 3
    在 C/C++ 中,陣列名稱 arr 在大多數情況下會隱式轉換為指向陣列首元素的指標(即 &arr[0])。指標運算 arr + 3 表示從陣列起始位址偏移 3 個元素,因此 arr + 3 會指向 arr[3] 的位址。這個選項是一個指標,指向第 3 個元素的位址,符合問題要求。
  • (D) *(arr + 3)
    類似於選項 (A),arr + 3 指向 arr[3] 的位址,但加上 * 解參考運算符後,*(arr + 3) 表示取出 arr[3] 的值,而不是位址本身。因此,這個選項也不符合問題要求。

分析與結論

問題要求的是指向第 3 個元素(即 arr[2],但選項中使用了 arr[3],可能是題目表述習慣)的位址,而不是值。選項 (A) 和 (D) 給出的是值,而 (B) 和 (C) 給出的是位址。

  • (B) &arr[3]arr[3] 的位址。
  • (C) arr + 3 也是 arr[3] 的位址(因為 arr + n 等價於 &arr[n])。

在 C/C++ 中,&arr[3]arr + 3 在語義上是等價的,都指向相同的位址。因此,兩個選項 (B) 和 (C) 理論上都是正確的。然而,這類選擇題通常假設只有一個標準答案,且根據常見的考試慣例,&arr[n] 是更直觀的「取第 n 個元素位址」的寫法,而 arr + n 是指標運算的特性,可能被認為稍微間接一些。

最終答案

(B) &arr[3]

0
0