为什么要将[]与指向数组的指针一起使用? 我是C++初学者,我很难理解为什么我们[]使用指向数组的指针。< /P>

为什么要将[]与指向数组的指针一起使用? 我是C++初学者,我很难理解为什么我们[]使用指向数组的指针。< /P>,c++,arrays,pointers,new-operator,C++,Arrays,Pointers,New Operator,据我所知,newint[5]返回一个指向大小为5的数组的指针 因此,如果我们将这个指针存储在一个变量中,我们将执行以下操作:int*arr=newint[5] 我不理解的是:如果我想访问该数组的索引0,我会执行arr[0] 为什么这个语法正确?因为在我看来,arr是一个指针,所以为了访问数组,我必须取消对指针的引用 我们为什么不取消指针的引用呢 在我看来,我会执行类似于*arr[0]的操作,但这是不正确的。数组下标运算符[]隐式地取消对指针的引用 本规范第8.2.1p1节对此进行了详细说明: 表

据我所知,newint[5]返回一个指向大小为5的数组的指针

因此,如果我们将这个指针存储在一个变量中,我们将执行以下操作:int*arr=newint[5]

我不理解的是:如果我想访问该数组的索引0,我会执行arr[0]

为什么这个语法正确?因为在我看来,arr是一个指针,所以为了访问数组,我必须取消对指针的引用

我们为什么不取消指针的引用呢


在我看来,我会执行类似于*arr[0]的操作,但这是不正确的。

数组下标运算符[]隐式地取消对指针的引用

本规范第8.2.1p1节对此进行了详细说明:

表达式E1[E2]在定义上与*E1+E2相同

第6.5.2.1p2节:

下标运算符[]的定义是E1[E2]与*E1+E2相同

因此,在您的示例中,arr[0]与*arr+0完全相同。括号之间的值被添加到指针值以指向所需的数组元素,结果指针被取消引用以获取对象

另外,说您的示例指向数组并不十分正确,而是指向数组的第一个元素。指向数组的指针如下所示:

int arr[5];
int (*p)[5] = &arr;
另一件可能令人困惑的事情是,在大多数上下文中,数组衰减为指向其第一个元素的指针。这意味着您可以执行以下操作:

int arr[5];
int *p = arr;
arr[1] = 5;    // sets element 1 of arr
p[1] = 7;      // also sets element 1 of arr

x[y]是*x+y的语法糖。使用它是因为它更容易阅读。arr指向数组的第一个元素这与指向arrayAs不同@Shawn说它只是语法上的糖。这可能更令人困惑,因为0[arr]也是有效的:P