根据我的类的笔记,则可以像指针和动态分配数组
int *A = new int[5]
其中A
是一个指针阵列中的C++分配阵列。
但是,你可以访问数组为A[3]
。你为什么要这样做?不是A
一个指针而不是实际的数组?
根据我的类的笔记,则可以像指针和动态分配数组
int *A = new int[5]
其中A
是一个指针阵列中的C++分配阵列。
但是,你可以访问数组为A[3]
。你为什么要这样做?不是A
一个指针而不是实际的数组?
索引operator[]
实际上定义为可用于指针而不是数组。 A[3]
实际上是*(A+3)
的同义词。它可以处理数组,因为数组可以隐式转换为指向其第一个元素的指针。
我从来没有听说过这种方式解释 - 整齐:) +1。 – 2012-01-06 18:07:26
@ w00te:这不是一个真正的解释。这是定义及其所有后果:例如3 [A]。 – 2012-01-06 18:14:16
A [3]是*(A + 3)的别名,它将指针取消引用。
你是对的!基本上,这是句法糖,这意味着语言设计师会采取一些措施让您的生活变得更加轻松,但在幕后它正在做一些完全不同的事情。 (这一点是有争议的)
实际上,这是做什么取指针位置在A
,移动指针5 int大小up,然后通过取消引用给你的值。
这是指针算术的起点:只要不移出数组,就可以用指针加或减数值(也可以在数组之后移动)。基本上,以下保持(用于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!
作为*类型*:A是类型“指针为int”的,但它指向的第一元件一个动态分配的int数组,是的 – sellibitze 2012-01-06 18:14:29