指针和动态分配的数组

时间:2012-01-06 18:03:50

标签: c++ arrays pointers

根据我的课堂笔记,您可以在C ++中分配一个数组,如

int *A = new int[5]

其中A是指向数组的指针。

但是你可以像A[3]那样访问数组。你为什么这样做?不是A指针而不是实际数组吗?

4 个答案:

答案 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!