【发布时间】:2019-07-15 08:59:29
【问题描述】:
直到现在,我还认为数组和指针是一样的。但我发现了一个奇怪的案例:
代码
int array[5] = { 10,11,12,13,14};
std::cout << array << std::endl;
std::cout << &array << std::endl;
std::cout << &array[0] << std::endl;
int *pArray = new int[5];
std::cout << pArray << std::endl;
std::cout << &pArray << std::endl;
std::cout << &pArray[0] << std::endl;
输出
0x7ffeed730ad0
0x7ffeed730ad0
0x7ffeed730ad0
0x7f906d400340
0x7ffeed730a30
0x7f906d400340
如您所见,array 和 &array 具有相同的值。但是pArray 和&pArray 具有不同的价值。如果数组与指针相同,则数组的地址应该与数组不同。
array 和 &array 怎么会一样呢?如果array 和&array 相同,那么保存数组值的内存地址是什么?
【问题讨论】:
-
这是因为数组不是指针。在数组的情况下,
&a和a是一回事。在指针的情况下,p是指针指向的地址,&p是存储指针值的地址。 -
这里我们可以见证语言的不一致。
new int[5]应该返回指向int[5]的指针,而不是指向int的指针。 -
@geza 这有什么不同?指针就是指针
-
@geza 这将需要添加(丑陋的)可变长度类型,或者创建动态数组的替代方法。