我试图在我的项目中使用动态数组,但我无法理解为什么我可以这样做:
int *a;
a = new int[1];
a[100]=2;
cout << a[100] << endl;
我的意思是,我创建了可以存储1个元素的数组'a',为什么我能够使用数组的第100个元素?它应该不存在,是吗?
答案 0 :(得分:1)
一些基本的东西:
您的数组存储在内存中,每个单元都有自己的地址。数组a
的名称指向内存中的位置。从那里a[0]
,a[1]
或仅 a[index]
与您键入*(a+index)
相同 - 它获取/设置值在内存中的(a + index)索引下。
实际上,即使它们没有被变量(数组等)使用,您也可以覆盖这些地址中的任何一个。当然你不应该这样做,但你的编译器不会生气(你也可以声明变长数组,编译器可能不关心,但你应该知道这一点)。
我尽量让它尽可能简单,我相信没有必要详细说明。