指针和方括号

Pointers and Square Brackets

本文关键字:方括号 指针      更新时间:2023-10-16

我很难解析这行代码:

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;
}

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

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

值得注意的是,像这样的每个表达式都应该与一个delete[]相结合,当你完成它时,它负责释放数组(就像每个正常的new都应该有一个delete)。

我很难解析这行代码:

int *a=new int[N];

如果N等于10,内存中发生的情况如下:

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

也就是说,您在堆上创建了一个包含10个整数的数组,并且a指向这些整数中的第一个。