C++中,往一个一维数组中连续输入数值,为什么在超过数组元素个数后还能正常输入,并能正常输出

如:inta[5];假设:cin>>a[i];连续输入1,2,3,4,5,6,7...(直到满足结束条件);居然可以cout<<a[6],并且值是7;不是数组a只能存5个... 如:int a[5];
假设:cin>>a[i]; 连续输入1,2,3,4,5,6,7...(直到满足结束条件);
居然可以cout<<a[6],并且值是7;
不是数组a只能存5个数吗,怎么还能输出a[6]呢?
展开
 我来答
0934302138
2012-05-10
知道答主
回答量:4
采纳率:0%
帮助的人:3.2万
展开全部

我记得我老师讲过c/c++不提供数组下标的越界检查,所以你的假设编译时编译系统时不会给任何错误信息。如果你在程序中只是定义了一个数组应该不能输出的(我的理解)。是要是你不止定义了这一个数组的话,那么就可能出现你说的那种现象。因为自动变量在系统内存中的存放次序并没有统一的规定,但系统在一般情况会按照程序中定义这些对象的书写顺序依次存放。

如:

#include <iostream.h>

void main(void)

{

int x=500,a[5]={0},y=200;

a[5]=1000;

cout<<"x="<<x<<"\n";

cout<<"a[5]="<<a[5]<<"\n";

cout<<"y="<<y<<"\n";

}

运行输出的结果是:

x=1000

a[5]=1000

y=200

程序中x,y,和a这组变量定义的次序,可以看出这组变量的存储分配图如:

在此程序中赋值语句中a[5]=1000. a[5]已经超出了数组a所占的存储区域,从图上可以看出是变量x所占的单元。所以当将1000赋值给a[5]的时候实际上市将1000赋值给了变量x。   所以才会输出那样难以理解的结果

要是没定义变量x和y的情况下就应该不会输出a[5]=1000的     你可以试一下看(我没试过)

希望对你有所帮助

chao1575639478
2012-05-09 · TA获得超过1391个赞
知道小有建树答主
回答量:353
采纳率:0%
帮助的人:217万
展开全部
int a[5]只是说分配5个int型的内存,而a[6]则是a[5]下面的内存中的值,其值具有不确定性...但并不影响输出...不过我想知道难道编译器没报错么?
追问
a[6]我觉得不应该出现,a[4]已经上限了,虽然说a[6]可以理解为a[5]的下一个值。
不影响输出是,但就我刚才举一个简单例子,cout<<a[6]居然输出来的值是7。不报错!
为什么?
追答
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted. 意思就是在运行时栈溢出,编译器为数组a在栈中分配了5个空间,但是访问的时候却超出了栈的范围..按说什么编译器都会报错的..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LYB661
2012-05-10 · TA获得超过314个赞
知道小有建树答主
回答量:232
采纳率:0%
帮助的人:72.3万
展开全部
只能说是你的编译器不太完美。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-05-10
展开全部
控制台可以,但关闭的时候会报错,具体原理也是不太清楚。在Win32应用程序下使用就是不可以滴
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式