数组的变量名与该数组的地址之间的区别是什么?

时间:2017-06-07 11:44:04

标签: c++ arrays pointers memory-address

在C ++中,将编译以下代码:

int a[5];
int (*b)[5] = &a;

虽然这不是:

int a[5];
int (*b)[5] = a;

在编译第二个时,g ++给了我一个错误,说"无法转换' int *'到' int(*)[5]'在初始化"。

但是,我认为a&a是一样的,因为

std::cout << a << std::endl;

std::cout << &a << std::endl;

产生相同的结果。

显然,a(数组变量的名称)与&a之间存在差异,/open是该数组的地址< / strong>即可。但究竟有什么不同呢?

2 个答案:

答案 0 :(得分:0)

在C和C ++中,表达式中的数组衰减为指向它的第一个元素的指针。因此,在你的秒示例中,左边是用右边的int *初始化的。

答案 1 :(得分:0)

它们的值(它们指向的地址)相等,但它们的类型不同:

  • (在此上下文中)aint [5]已衰为)int *
  • &aint (*)[5]

如果您声明int x;,则可以在&x(char *)&x之间观察到相同的差异(类型但不是值)。