当我们探索数组时,出现了 2 个问题:
一。
#include <iostream>
using std::cout;
using std::cin;
int main (void)
{
setlocale(LC_ALL, "ru");
int a[5];
cout << a << "\n" << &a << "\n";
system("pause");
}
为什么显示相同的地址?读取时,а- 数组第一个元素上的指针。我们输出第一个元素的地址,然后输出指向它的指针的地址,但地址是相同的。你能澄清一下情况吗?
2. 录音
int a[5]
和
int (*a)[5]
第二个示例是什么意思,如何使用它(使用 new)以及它与第一个示例有何不同。
a不是“指向数组第一个元素的指针”。a是数组本身。数组不是指针。但是,在某些(非常多)上下文中,“数组”类型的值会隐式自动转换为“指向数组元素的指针”类型的值。该指针指向数组的第一个(零)元素。这产生了数组是指针的错觉。
但并不总是执行这样的转换。一元内置运算符
&只是一个例外示例:一元运算符的操作数&仍然是一个数组。因此,在您的情况下&a,它不是您错误地假设的“指针地址”,而是整个数组的地址a。它有类型int (*)[5]。同时,就
a在您的示例中,它经历了这样的转变,即 给出指向数组第一个元素的指针. 它有类型int *。这些地址在数字上是相同的这一事实并不令人惊讶。数组的第一个元素正好在整个数组开始的地方开始。
第二个示例是指向数组的指针。它与其他指针没有根本区别,您应该像使用任何其他类型的指针一样“使用”它。将一元运算符应用于此指针
*,您将可以访问指向的数组,其行为与任何其他数组一样。