[英]Question about the array's address in C++
我對數組的地址有疑問。
*(a + *a)
與a[3]
相同嗎? 如果是,請給我一些解釋。
int main() {
int a[] = { 1, 2, 3, 4, 5, 6};
*(a + *a);
}
(a + *a) 和 a[3] 一樣嗎?
不它不是。
a
是數組第一個元素的地址。 *a
是位於數組第一個元素的值。 所以a+*a
是這兩個值的總和,與a[3]
不同。
如果數組的第一個元素恰好是3
,那么*(a+*a)
將與a[3]
相同。 但這不是你的情況。 即*a=3
, (a+3)
是 a 的第四個元素a
位置, *(a+3)
是數組的第四個位置的元素,也可以使用a[3]
訪問。
沒有。 *a
等於 1,所以cout << a + 1
會將 a 的 output 地址加 4,也就是一個 int 類型的大小。 這是因為 a 是一個 int 數組,所以每個增量都會將它的地址加上sizeof(int)
,即 4。
泛化可以衰減為指針的給定X* x
或X x[]
:
*(x + y)
與x[y]
相同。*x
與x[0]
相同實際上*(a + *a)
只是寫a[a[0]]
一種非常令人困惑的方式,因此它的評估方式完全取決於a[0]
是什么。
在這種情況下,它是1
,因此您會得到a[a[0]]
或a[1]
作為結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.