我不明白数组名称是如何指向数组的指针

I dont understand how an arrays name is a pointer to the array

本文关键字:数组 何指 指针 明白      更新时间:2023-10-16

im在C 中阅读一本书,我正在进行一些测试,因为我不了解某些内容,当我尝试打印这3行时,我期望所有的东西有所不同。在记忆指针的位置,第二个是由指针存储的地址,第三个地址,该值在指针存储的地址上的值。但是前两个是相同的:

cout <<&arey <<"n";
cout <<arey <<"n";
cout <<*arey <<"n";

输出:

0x6afee8
0x6afee8
0

有人可以解释为什么我已经读到数组的名称是阵列的指针,因此,如果是指针,则应该有自己的内存地址吗?

我不明白数组名称是如何指向数组的指针

不是。

我读到数组的名称是阵列的指针

谁写的是对你说谎的。

数组的名称是数组的名称。

有人可以解释为什么

在某些条件下(例如将其传递给函数(,它会自动(并透明地(转换为指针转换为数组的第一个元素。这是我们从c。

继承的不幸事实

但是数组的名称仍然只是数组的名称。

so:

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)(即函数调用(,并解释您的输出。

如果是指针,它应该有自己的内存地址正确吗?

如果是指针,那么,是的。

轨道上的轻度竞赛答案:

因为这个问题被归类为C 问题,而不是普通C,因此也可能有以下内容。

现代C 建议使用std::array来支持普通的C阵列。它没有成本,但更舒适(例如,在内存和尺寸中结合位置,甚至是编译时间界限(。

另请参见:STD :: Array和C 核心指南-STD :: Array

大多数操作都透明使用C阵列。

此外,更喜欢使用std::addressof来支持&(也可以与std::array一起使用。

请参阅:std ::地址