首頁 >後端開發 >C++ >`&array[5]` 是 C 語言中超出陣列範圍的有效指標嗎?

`&array[5]` 是 C 語言中超出陣列範圍的有效指標嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-04 10:03:35369瀏覽

Is `&array[5]` a Valid Pointer in C   Beyond Array Bounds?

陣列下標可以超出陣列範圍嗎?

下面的程式碼是否符合C 標準:

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];

具體來說, &array[5] 在這種情況下的有效性是

C 標準

依C99標準草稿:

  • §6.5.2.1,第2 段:「E1[E2] 與(*((E1) (E2)))"
  • §6.5.3.2,第 3段(強調):「如果操作數是[] 運算子的結果,則既不是& 運算子也不是一元*對[] 隱含的值進行求值,結果就好像刪除了& 運算子並將[] 運算子改為運算子。指向陣列物件的最後一個元素後一位,則表達式(P) 1 指向最後一個元素後一位陣列物件的元素,如果表達式Q 指向陣列物件的最後一個元素後一位,則表達式(Q ) - 1指向陣列的最後一個元素物件。元素指向超過一個物件末尾的一個元素數組(不被取消引用)。
  • &array[5] 相當於 &*(array 5),這相當於 (array 5)。 (array 5) 指向數組末尾的一個。
因為 &array[5] 不會導致取消引用,根據 C 標準是合法的。

以上是`&array[5]` 是 C 語言中超出陣列範圍的有效指標嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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