簡體   English   中英

關於C++中數組地址的問題

[英]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* xX x[]

  1. *(x + y)x[y]相同。
  2. *xx[0]相同

實際上*(a + *a)只是寫a[a[0]]一種非常令人困惑的方式,因此它的評估方式完全取決於a[0]是什么。

在這種情況下,它是1 ,因此您會得到a[a[0]]a[1]作為結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM