Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';数组的变量名和该数组的地址之间的区别是什么? 在C++中,下面的代码将编译: int a[5]; int (*b)[5] = &a;_C++_Arrays_Pointers_Memory Address - Fatal编程技术网

什么';数组的变量名和该数组的地址之间的区别是什么? 在C++中,下面的代码将编译: int a[5]; int (*b)[5] = &a;

什么';数组的变量名和该数组的地址之间的区别是什么? 在C++中,下面的代码将编译: int a[5]; int (*b)[5] = &a;,c++,arrays,pointers,memory-address,C++,Arrays,Pointers,Memory Address,但这不会: int a[5]; int (*b)[5] = a; 编译第二个时,g++给了我一个错误,说“无法在初始化时将'int*'转换为'int(*)[5]” 然而,我认为a和&a是一样的,因为 std::cout << a << std::endl; :在C和C++中,CUT< P>一个表达式中的数组衰变到指向它的第一个元素的指针。因此,在您的示例中,左边用右边的int*初始化。它们的值(它们指向的地址)相等,但类型不同: (在此上下文中)a是(int[5]衰

但这不会:

int a[5];
int (*b)[5] = a;
编译第二个时,g++给了我一个错误,说“无法在初始化时将'int*'转换为'int(*)[5]”

然而,我认为
a
&a
是一样的,因为

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

<代码>:在C和C++中,CUT< P>一个表达式中的数组衰变到指向它的第一个元素的指针。因此,在您的示例中,左边用右边的int*初始化。

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

  • (在此上下文中)
    a
    是(
    int[5]
    衰减为)
    int*
  • &a
    int(*)[5]


如果您声明
intx&x
(char*)&x
,你可以观察到相同的差异(在类型上而不是在值上),这就像问为什么
i
&i
对于某些
int i不一样。你到底不清楚什么?@BaummitAugen公平地说,
cout@user2079303如果
a
char[]
,那就不清楚了,但这可能是唯一的例外。(另外,请注意,我的第一条评论比澄清性编辑要老。)@BaummitAugen很抱歉在编辑之前没有评论您的评论。但是为什么不能是
char[]
?如果
a
char[]
,由于
运算符的原因,它不会打印相同的输出
std::cout << &a << std::endl;