c/c ++指向数组的指针与指向指针的指针

Erb*_* Mo 0 c c++ arrays pointers

我认为数组和指针基本上是一回事,直到我运行这个程序:

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;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

*a: 19
 a: 0x7f94524000e0
 &a:0x7fff51b71ab8
*b: 19
 b: 0x7fff51b71ab4
 &b:0x7fff51b71ab4
Run Code Online (Sandbox Code Playgroud)

有谁可以解释为什么&b的输出与b相同?

谢谢!-Erben

Die*_*ühl 6

好吧,b是一个数组.在最轻微的借口下,它会腐烂成指向第一个元素的指针b.但是请注意,该表达式b&b等效的:b衰变成指针的第一个元素,即,它是类型int*&b是指向数组,即它是类的int(*)[1].

  • @Robertfrost:`a`和`&a`显然属于不同的实体:`a`是一个对象,恰好是指向`int`的指针,`&a`是对象的地址,即它是指向a的指针指向`int`的指针.但是数组是特殊的:如果你只是命名和评估它们,它们会自动变成指向它们第一个元素的指针,即`b`相当于`&b [0]`.该元素与从"&b"获得的数组对象的起始位置相同. (2认同)