C++ 数组越界

#include<iostream>
using namespace std;
void main()
{
int a[5]={1,2,3,4,5};
cout<<a<<endl;
cout<<a[5];
}
一个简单的小程序,请问:
a为数组的起始地址对吗?该地址是怎样分配的?
a[5]的内容输出的是一串数字,它到底是什么呢?越界了吗?
问题是编译器没有针对a[5]显示错误!每次输出的都是相同的一串数字!
而且试了N次a输出的内容是相同的一串数字+字母,应该是内存地址!为什么是相同的?难道不是随机分配的吗?

(1)a是数组的起始地址,这段地址是执行时从栈上申请的,程序输出的地址通常来说是一个“相对”地址,所以每次输出a的值都是固定的,除非你在a变量前增加变量,否则是不会改变的
(2)编译器在编译数组的时候a[5]是按照*(a+5)处理的,编译器本身是不会知道是否越界的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-06
注意数组a的地址是从0开始的
因此没有a[5],只有a[0],a[1]......a[4]……
所以a[5]输出啥都是有可能的(正确的来说严格的编译器会给你runtime error)
第2个回答  2010-07-06
a[5]输出的是a[4]后面的内存里面的东西,不知道里面存了什么东西,不是内存地址
第3个回答  2010-07-06
越界了 a[0] 到 a[4]
第4个回答  2010-07-06
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5.
相似回答