首頁 >後端開發 >C++ >&array[5] 是用來存取結尾後一位陣列元素的有效 C 表達式嗎?

&array[5] 是用來存取結尾後一位陣列元素的有效 C 表達式嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-27 00:44:11509瀏覽

Is &array[5] a Valid C   Expression for Accessing the One-Past-the-End Array Element?

使用&array[5] 存取最後一位陣列元素

問題:

問題:

[5] 是否被視為有效的 C程式碼表達式,它引用了超出了末尾的元素array?

答案:

是的,根據C 標準,&array[5] 被視為合法的C 代碼。

詳細解釋:

  • C99標準:
  • 6.5.2.
  • 定義下標運算子[] 等效於(((E1) (E2) )),其中E1 為陣列對象,E2 為integer.

6.5.3.2,第3 段: 指出如果& 運算子的運算元是[] 運算子的結果,則不計算& 運算子和隱含的一元* ,導致& 運算子被刪除,並且 [] 運算子被替換為運算子。

  • C標準:

6.5.6,第8 段:

允許指針指向數組的最後一個元素,前提是它們沒有取消引用。
  • 根據這些標準,表達式&array[5] 的計算結果為如下:
  • &
  • (&array[5]) = &
(數組5)

&*(數組5) = 數組5

由於數組5 指向數組末尾且未取消引用,因此&array[5] 是有效的

與C 標準的比較:

C 標準在這方面與C 標準相符。

區別對待的原因來自於數組5 或&array[4] 1:之間的主要區別&array[5] 和array 5 或&array[4] 1等表達式是它們的預期用途。雖然陣列 5 和 &array[4] 1 明確執行指針算術來取得從陣列開頭偏移的指針,但 &array[5] 使用 [] 運算子直接存取該偏移處的元素。這種區別使程式設計師可以更輕鬆地引用數組的末尾,而無需執行明確的指標算術。

以上是&array[5] 是用來存取結尾後一位陣列元素的有效 C 表達式嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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