C ++动态数组 - 为什么我能够这样做?

时间:2016-05-30 20:11:40

标签: c++ arrays dynamic dynamic-arrays

我试图在我的项目中使用动态数组,但我无法理解为什么我可以这样做:

int *a;
a = new int[1];
a[100]=2;

cout << a[100] << endl;

我的意思是,我创建了可以存储1个元素的数组'a',为什么我能够使用数组的第100个元素?它应该不存在,是吗?

1 个答案:

答案 0 :(得分:1)

一些基本的东西:
您的数组存储在内存中,每个单元都有自己的地址。数组a的名称指向内存中的位置。从那里a[0]a[1]或仅 a[index]与您键入*(a+index) 相同 - 它获取/设置值在内存中的(a + index)索引下。

实际上,即使它们没有被变量(数组等)使用,您也可以覆盖这些地址中的任何一个。当然你不应该这样做,但你的编译器不会生气(你也可以声明变长数组,编译器可能不关心,但你应该知道这一点)。

我尽量让它尽可能简单,我相信没有必要详细说明。