你能取得陣列元素的位址嗎?
下面的程式碼一直是程式設計中爭論的話題社群:
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
具體來說,&array[5]在這種情況下是否是合法的C程式碼的問題有
C 標準的立場
根據 C標準,具體為:
的意義&array[5]
將這些規則應用到&array[5],我們有:
合法嗎?
是的,合法。該標準明確允許指標指向超出數組末尾的一個元素,前提是它們沒有取消引用。在這種情況下,&array[5]僅用於取得位址,而不是存取該位址處的值,因此它在標準允許的範圍內。
為什麼與array 5 或&array[4] 1?
&array[5] 的行為與array 5 或&array[4] 1 不同,因為和[]運算子的優先權與[] 隱含的一元* 運算子的行為結合。具體來說:
相反,&array [5] 的計算方式就好像刪除了& 運算子並將[] 運算子變更為運算符,結果是數組5,但沒有對一元進行計算* 運算子。
以上是在 C 中取得數組元素末尾一位的位址合法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!