根据我的课堂笔记,您可以在C ++中分配一个数组,如
int *A = new int[5]
其中A
是指向数组的指针。
但是你可以像A[3]
那样访问数组。你为什么这样做?不是A
指针而不是实际数组吗?
答案 0 :(得分:5)
索引operator[]
实际上定义为处理指针而不是数组。 A[3]
实际上是*(A+3)
的同义词。它适用于数组,因为数组可以隐式转换为指向第一个元素的指针。
答案 1 :(得分:3)
A [3]是*(A + 3)的别名,它取消引用指针。
答案 2 :(得分:1)
你是对的!基本上,这是语法糖,这意味着语言设计师把一些东西放在适当的位置,让你的生活更轻松,但在幕后,它正在做一些完全不同的事情。 (这一点是有争议的)
实际上,这样做是将指针位置放在A
,将指针5向内移动,然后通过解除引用来为您提供值。
答案 3 :(得分:1)
这是指针运算的起点:你可以用指针添加或减去值,只要不离开数组(好吧,你可以在数组之后向上移动)。基本上,以下保持(A
是指向具有leat 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!