C++数组越界的思考
继上一个贴字之后我的思考:
————————————————————————————————————————————————————————————————
数组越界
如果申明int a[5];
那么我索引到a[5],a[6]....这些数据是什么样的格式呢?int?还是以int型结构索引?
是不是我定义了int型的数组,然后以int型读取从数组起始地址开始的内存区域吗(包括越界区域的读取)?
例如我上一贴说到的测试程序:
#include <iostream>
using namespace std;
int main()
{
int i;
double a[4];
for (i=0;i<7;i++)
{
a[i]=i;
}
cout<<a[6];
return 0;
}
结果很正常的输出了6,我利用了数组后的内存区域!很显然是我把6赋值给了a[6]的内存区域,但是a[6]究竟是什么呢?为什么它是有意义的?是什么样的结构,是我所猜测的int型吗?
是因为我申明了int型,然后指针从a的地址开始,只要你写a[x],不管x是几,它都将a[x]视作int型操作?
难道数组的申明就是找到一个大于等于申明数组的内存区域,然而你的索引是可以任意的(包括越界,这里不讨论会引起非法操作,只讨论实质),而且都是你以所定义的类型(
如int),这样就可以解释a[6],a[7]....这些数据,到底是怎么样的呢?如我所猜想的那样吗?
有什么书介绍这方面的只是,高手指导一下!
写的有点杂,大家看看我的想法,发表意见!我觉得以这种我这种想法可以很好解释数组越界后的实际操作,但是没有权威支持,希望懂的不懂得都说说自己的想法!
还有推荐一个好的编译器给我!谢谢!