为什么使用`int(*p)[5]`的结果如此令人困惑?

Arc*_*rus 4 c++ pointers pointer-to-array

我知道这int (*p)[5]意味着一个指向5个int数组的指针.所以我在下面编写这个程序:

#include <iostream>
using namespace std;

int main()
{
  int a[5]={0,1,2,3,4};
  int (*q)[5]=&a;
  cout<<a<<endl;         
  cout<<q<<endl;
  cout<<*q<<endl;        
  cout<<**q<<endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的机器上,结果是:

0xbfad3608
0xbfad3608       //?__?
0xbfad3608
0
Run Code Online (Sandbox Code Playgroud)

我能理解这*q意味着地址 a[0]**q意味着价值a[0],但为什么和?q有相同的价值?我心情不好,应该是他们的地址!我完全糊涂了.有人请帮帮我.请!a*q

rob*_*off 8

这样看:

   q == &a
   *q == a
   **q == *a
Run Code Online (Sandbox Code Playgroud)

你没有尝试打印&a.如果你这样做,你会发现它具有相同的价值a.自&a == a和,和q == &a,和*q == a,传递q == *q.

如果你想知道原因&a == a,请查看为什么数组变量的地址与它自己相同?