我在解析这行代码时遇到了困难:
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;
}
答案 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
指向第一个整数。