指针和动态分配的数组 根据我的类注释,可以在C++中分配一个数组,比如 int *A = new int[5]

指针和动态分配的数组 根据我的类注释,可以在C++中分配一个数组,比如 int *A = new int[5],c++,arrays,pointers,C++,Arrays,Pointers,其中A是指向数组的指针 但是您可以通过A[3]访问阵列。你为什么能这么做?A不是指针而不是实际数组吗?A[3]是*(A+3)的别名,它取消了指针的引用。索引操作符[]实际上是定义为处理指针而不是数组的A[3]实际上是*(A+3)的同义词。由于数组可以隐式转换为指向其第一个元素的指针,因此它可以在数组上工作。你说得对!基本上,这是语法上的甜点,意思是语言设计者把一些东西放在适当的位置,让你的生活更轻松一些,但在幕后它做了一些完全不同的事情。(这一点值得商榷) 实际上,这样做是将指针位置移到A,将指

其中
A
是指向数组的指针


但是您可以通过
A[3]
访问阵列。你为什么能这么做?
A
不是指针而不是实际数组吗?

A[3]是*(A+3)的别名,它取消了指针的引用。

索引
操作符[]
实际上是定义为处理指针而不是数组的
A[3]
实际上是
*(A+3)
的同义词。由于数组可以隐式转换为指向其第一个元素的指针,因此它可以在数组上工作。

你说得对!基本上,这是语法上的甜点,意思是语言设计者把一些东西放在适当的位置,让你的生活更轻松一些,但在幕后它做了一些完全不同的事情。(这一点值得商榷)


实际上,这样做是将指针位置移到
A
,将指针向上移动5个整数,然后通过解引用给出值。

这是指针算法的起点:只要不离开数组,就可以使用指针添加或减去值(好的,你可以移动到数组的右边)。基本上,下面的保持(对于
A
是指向至少有
i+1
元素的数组的指针):

A[i]
*(A + i)  // this what A[i] means
*(i + A)  // addition is commutative
i[A]       // this sould work, too - and it does!

我从未听人这样解释过-neat:)+1。@w00te:这不是真正的解释。这是一个定义及其所有后果:例如3[A]。至于类型:A是“指向int的指针”。但它指向动态分配的int数组的第一个元素,是的。