什么';数组的变量名和该数组的地址之间的区别是什么? 在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;