我不明白数组名称是如何指向数组[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我不明白数组名称是如何指向数组[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
- Address of array 3回答
- What is array decaying? 8个答案
我正在读一本用c ++写的书,我正在做一些测试,因为我没有理解的东西,当我尝试打印这3行时,我期待所有的东西都不同。第一个,指针内存中的位置,第二个,指针存储的地址,第三个地址,指针存储的地址的值。但前两个是相同的:
cout <<&arey <<"
";
cout <<arey <<"
";
cout <<*arey <<"
";
输出:
0x6afee8
0x6afee8
0
有人可以解释为什么我已经读过数组的名称是一个指向数组的指针,所以如果它是一个指针,它应该有自己的内存地址吗?
我不明白数组名称是如何指向数组的指针
事实并非如此。
我已经读过数组的名称是指向数组的指针
谁写的那个骗你。
数组的名称是数组的名称。
有人可以解释原因
在某些条件下(例如将其传递给函数),它会自动(并透明地)转换为指向数组第一个元素的指针。这是我们从C继承的一个不幸的事实。
但是数组的名称仍然只是数组的名称。
所以:
arey An array
&arey Address of the array
f(&arey) Passing the address of the array
f(arey) Still passing the address of the array (ish) - thanks a lot, C!
f(*arey) Passing the first element's value
现在考虑cout << x
实际上是cout.operator<<(x)
(即一个函数调用),它解释了你的输出。
如果它是一个指针,它应该有自己的内存地址吗?
如果它是指针那么,是的,它会。
Lightness Races in Orbit答案的附录:
因为这个问题被归类为C ++问题而不是简单的C,所以也可能存在以下兴趣。
现代C ++建议使用std::array
来支持普通的C-Array。它没有成本,但更舒适(如在内存和大小中组合位置甚至编译时边界检查)。
另见:std::array和C++ Core Guidelines - std::array
大多数操作对C-Arrays的使用都是透明的。
此外,它更喜欢使用std::addressof
而不是&
(这也适用于std::array
)。
以上是关于我不明白数组名称是如何指向数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章