C++中,往一个一维数组中连续输入数值,为什么在超过数组元素个数后还能正常输入,并能正常输出
假设:cin>>a[i]; 连续输入1,2,3,4,5,6,7...(直到满足结束条件);
居然可以cout<<a[6],并且值是7;
不是数组a只能存5个数吗,怎么还能输出a[6]呢? 展开
我记得我老师讲过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的 你可以试一下看(我没试过)
希望对你有所帮助
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个空间,但是访问的时候却超出了栈的范围..按说什么编译器都会报错的..
2012-05-10
广告 您可能关注的内容 |