2012-01-06 103 views
2

根据我的类的笔记,则可以像指针和动态分配数组

int *A = new int[5] 

其中A是一个指针阵列中的C++分配阵列。

但是,你可以访问数组为A[3]。你为什么要这样做?不是A一个指针而不是实际的数组?

+0

作为*类型*:A是类型“指针为int”的,但它指向的第一元件一个动态分配的int数组,是的 – sellibitze 2012-01-06 18:14:29

回答

5

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

+1

我从来没有听说过这种方式解释 - 整齐:) +1。 – 2012-01-06 18:07:26

+0

@ w00te:这不是一个真正的解释。这是定义及其所有后果:例如3 [A]。 – 2012-01-06 18:14:16

3

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

1

你是对的!基本上,这是句法糖,这意味着语言设计师会采取一些措施让您的生活变得更加轻松,但在幕后它正在做一些完全不同的事情。 (这一点是有争议的)

实际上,这是做什么取指针位置在A,移动指针5 int大小up,然后通过取消引用给你的值。

1

这是指针算术的起点:只要不移出数组,就可以用指针加或减数值(也可以在数组之后移动)。基本上,以下保持(用于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!