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

取得 C 數組末尾的位址合法嗎?

Susan Sarandon
發布: 2024-12-26 07:18:45
原創
399 人瀏覽過

Is Taking the Address One Past the End of a C   Array Legal?

C 標準允許取得陣列元素的位址嗎?

下面的程式碼片段引發了關於根據C 標準,其有效性:

具體來說, &array[5] 是合法的C 表達式嗎在這種情況下?

根據C 標準的合法性

C 標準定義了此表達式的合法性:

  • C 17 標準6.5.2.1,第2 段: 將E1[E2]定義為與(*((E1) (E2))).
  • C 17 標準6.5.3.2,第3 段: 聲明對於[] 表達式, & 運算子和隱含的* 是未評估,結果為&(E1 E2)。
  • C 17 標準 6.5.6,段落8: 允許指標指向超出陣列結尾的一個元素,但禁止取消引用它們。

解釋

透過將這些規則應用於&array[5],我們有:

由於(數組5)點超出數組末尾且未取消引用,它是符合C 標準的合法表達式

與C 標準的比較

此行為也符合C 標準,它允許獲取超出數組末尾的元素的位址,前提是它們不是

不同處理的原​​因

對數組5 和&array[4] 1 進行不同處理的決定源自於這些表達式的不同目的:

  • 數組5 提供了一個超出數組末尾的指針,允許比較和遍歷數組之外的內容數組的邊界。
  • &array[4] 1 嘗試建立對不存在元素的引用,這將導致未定義的行為。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板