簡體   English   中英

c / c ++指向數組的指針與指向指針的指針

[英]c/c++ pointer to an array vs pointer to a pointer

在運行此程序之前,我認為數組和指針基本上是同一件事:

int main() {
  int* a = new int(19);
  int b[1];
  b[0] = 19;

  printf("*a: %d\n a: %p\n &a:%p\n", *a, a, &a);
  printf("*b: %d\n b: %p\n &b:%p\n", *b, b, &b);
  delete a;
}

輸出為:

*a: 19
 a: 0x7f94524000e0
 &a:0x7fff51b71ab8
*b: 19
 b: 0x7fff51b71ab4
 &b:0x7fff51b71ab4

有人可以解釋一下為什么&b的輸出與b相同嗎?

謝謝! -埃爾本

好吧, b是一個數組。 在絲毫借口下,它將衰減為指向b的第一個元素的指針。 但是請注意,表達式b&b相等的: b將第一個元素衰減為指針,即它的類型為int*&b是數組的指針,即其類型為int(*)[1]

數組和指針不一樣。 指針的行為類似於數組(例如,按索引訪問)。

&b是指向整個數組的指針, b是指向第一個元素的指針。 它們可能指向內存中的相同地址,但它們是完全不同的東西。

        +-------------------------------+  
        |+-----+-----+-----+-----+-----+|  
        ||     |     |     |     |     ||  
 &b---->||  0  |  1  |  2  | ... |  N  ||  
        ||     |     |     |     |     ||  
        |+-----+-----+-----+-----+-----+|  
        +---^---------------------------+  
            |                              
            b                              

a是一個變量。 您正在使用new分配內存,並將結果分配給此指針。 您可能決定在程序a后續版本中存儲其他內容。

b是不同的。 它不能存儲不同的地址,因此它不是一個變量。 它是一個數組,具有固定的起始位置。

因此, b&b相同。 但內容a和的實際地址a是不同的。

暫無
暫無

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

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