C++ 动态数组 - 为啥我能做到这一点? [复制]
Posted
技术标签:
【中文标题】C++ 动态数组 - 为啥我能做到这一点? [复制]【英文标题】:C++ Dynamic Arrays - Why am I able to do this? [duplicate]C++ 动态数组 - 为什么我能做到这一点? [复制] 【发布时间】:2016-05-30 20:11:40 【问题描述】:我试图在我的项目中使用动态数组,但我不明白为什么我可以这样做:
int *a;
a = new int[1];
a[100]=2;
cout << a[100] << endl;
我的意思是,我创建了可以存储 1 个元素的数组“a”,那么为什么我可以使用数组的第 100 个元素呢?它不应该存在,不是吗?
【问题讨论】:
同样的原因,你可以在篮球比赛中捡起球然后跑掉,即使“在篮球比赛中你不能拿着球跑”。 因为你被允许做那些不起作用的事情。你正在访问你不应该访问的内存——所有的赌注都被取消了——它看起来似乎有效,但实际上并没有。 @KerrekSB 辉煌。 :-) No out of bounds error 的可能重复项也类似:***.com/questions/1239938/… @KerrekSB 我喜欢这个——“我的驾照被吊销了,但是为什么我还能开车去开车呢?” 【参考方案1】:一些基本的东西:
您的数组存储在内存中,每个单元格都有自己的地址。数组名称a
指向内存中它开始的位置。从那里a[0]
、a[1]
或只是 a[index]
与您键入*(a+index)
相同 - 它获取/设置位于内存中 (a+index) 索引下的值.
事实上,您可以覆盖这些地址中的任何一个,即使它们没有被您的变量(数组等)使用。当然你不应该这样做,但你的编译器不会生气(你也可以声明变长数组,编译器可能不在乎,但你应该意识到这一点)。
我尽量让它简单,我相信没有必要详细说明。
【讨论】:
以上是关于C++ 动态数组 - 为啥我能做到这一点? [复制]的主要内容,如果未能解决你的问题,请参考以下文章