指针和方括号

时间:2014-06-05 17:31:23

标签: c++ pointers

我在解析这行代码时遇到了困难:

int *a=new int[N];

因此,这声明了一个名为“a”的新整数指针,无论它指向何处,都会存储一个指向大小(int + N)对象的新指针。这是因为

int[N]:=*(int+N)

这个问题是N是类size_t的一个实例,那么添加有什么意义呢?完整代码如下:

int main()
{
const std::size_t N = 100;
int* a = new int[N];

for (std::size_t n = 0; n < N; ++n)
    a[n] = n;

delete[] a;
}

2 个答案:

答案 0 :(得分:5)

您将int[N]视为数组访问,例如array[5]*(array + 5)相同。那不是它的本质。毕竟,int是一种类型。

new int[N]实际上是一个分配N int s数组的表达式。它返回指向该数组中第一个int的指针,然后您将其指定给a

值得注意的是,每个这样的表达式都应该与delete[]结合使用,new负责在完成数组时解除分配数组(就像每个普通delete应该有{ {1}})。

答案 1 :(得分:4)

  

我在解析这行代码时遇到了困难:

int *a=new int[N];

如果N等于10,这就是内存中发生的事情:

  0   1   2   3   4   5   6   7   8   9
+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+
  ^
  |
+-|-+
| * | a
+---+

也就是说,在堆上创建一个包含10个整数的数组,a指向第一个整数。