首頁  >  文章  >  後端開發  >  `2[arr]` 在 C 和 C 中工作嗎?

`2[arr]` 在 C 和 C 中工作嗎?

DDD
DDD原創
2024-11-26 06:43:09423瀏覽

Does `2[arr]` Work in C and C  ?

在C 和C 語言中使用Index[array] 存取陣列

考慮以下程式碼片段:

int arr[] = {1, 2, 3};
2[arr] = 5; // Does this compile?
assert(arr[2] == 5); // Does this assertion fail?

有些面試官可能會問為什麼這段程式碼片段編譯和執行時沒有錯誤。

理解程式碼

表達式 2[arr] 相當於 *(2 arr)。由於加法在 C 和 C 中是可交換的,因此 [] 的參數順序並不重要。因此,2[arr] 有效地存取了陣列 arr 的第三個元素。

這是由語言規範保證的嗎?

是的。 C 和C 標準明確規定了此行為:

  • C99 標準: 第6.5.2.1 段規定E1[E2] 等效於*((E1) (E2)) .
  • C 11 標準:段落5.2.1.2 規定「E1[E2] 相當於「(*(E1) (E2))」

因此,使用index[array] 存取陣列是由語言規範保證的,即使如果它看起來不尋常或違反直覺。

以上是`2[arr]` 在 C 和 C 中工作嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn