首頁 >後端開發 >C++ >透過下標取得 C 數組末尾的位址合法嗎?

透過下標取得 C 數組末尾的位址合法嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-20 11:07:10939瀏覽

Is Obtaining the Address One Past the End of a C   Array via Subscripting Legal?

查詢後一數組位址取得的合法性

問題

在C語言中,能否取得陣列元素的位址透過下標取得已過尾數,如下碼

具體來說,&array[5] 符合C 標準嗎?

答案

是的,代碼符合 C 標準。

說明

依據C99草案標準:

§6.5.2.1,第2 段:

後綴表達式後跟方方括號[] 中的表達式是數組元素的下標指定物件。

§6.5.3.2,段落3:

如果[& 運算子] 的運算元是[] 運算子的結果,則& 運算子和[]隱含的一元* 都不會被求值,結果為就像刪除& 運算子並將[] 運算子變更為運算子一樣。

§6.5.6,段落8:

如果表達式P 指向陣列物件的最後一個元素,則表達式(P) 1 指向陣列物件的最後一個元素。

基於這些摘錄:

  • & 運算子產生指標的位址運算元。
  • 應用於 [] 運算子的結果時,可以刪除 & 運算符,而 [] 運算子成為運算子。
  • 指向陣列最後一個元素的表達式可以合法地將 1 指向陣列結尾。

因此,表達式 &array[5] 等價於 *(array 5),它指向超過數組末尾 1數組的最後一個元素。根據標準,這是合法的,只要指針沒有取消引用。

以上是透過下標取得 C 數組末尾的位址合法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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