数组的变量名和该数组的地址有什么区别?

What's the difference between the variable name of an array and the address of that array?

本文关键字:数组 什么 区别 变量名 地址      更新时间:2023-10-16

在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,即该数组的地址。但是有什么区别?

在c和c 中,一个表达式中的数组衰减到指向其第一个元素的指针。因此,在您几秒钟的示例中,左侧用int*在右侧进行初始化。

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

  • (在这种情况下( a是( int [5]腐烂到( int *
  • &aint (*)[5]

如果您声明int x;,则可以观察到例如&x(char *)&x

相关文章: