Java学习笔记33:数组下标越界

数组下标越界在引用数组元素时,使用的下标超过了该数组下标的应有范围。

但应注意的是:
C/C++不对数组做边界检查。 可以重写数组的每一端,并写入一些其他变量的数组或者甚至是写入程序的代码。不检查下标是否越界可以有效提高程序运行的效率,因为如果你检查,那么编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降,所以为了程序的运行效率,C / C++才不检查下标是否越界。发现如果数组下标越界了,那么它会自动接着那块内存往后写。
关于C/C++为什么不对数组的下标是否越界做检查,可以参考:
http://www.xuebuyuan.com/967089.html

因为编译器不会自动检测你的数组下标是否越界,而是把这个任务交给了程序员自己,所以我们在写程序,引用数组元素时,一定注意不要让数组的下标越界。
还有,初学者一定不能忘了数组的下标是从0开始的,不是常识中的从1开始。

内存溢出在初始化数组(给数组元素赋值)时,初始化(赋值)元素的个数超过了数组定义时元素的个数。**

这里的元素个数就是在定义数组时那个方框框里的数字,对于多维数组来说,元素个数 = 每个方框框里的数字之积。
当然,求数组元素个数可以用公式:
数组元素个数 = sizeof(数组名)/sizeof(数组任意一个元素)

为什么会出现数组下标越界?
C语言不检查数组下标的合法性

数组下标越界的危害
数组下标越界时,结果随机。可能导致程序功能不正常,也可能导致程序崩溃。

如何防止数组下标越界?
1、在使用循环遍历数组元素时,注意防范off-by-one的错误。

2、对于作为函数参数传入的数组下标,要判断其合法性。if ( (pos < 0) || (pos > ARRAY_SIZE) ) {异常处理}

猜你喜欢

转载自blog.csdn.net/qq_30242987/article/details/85856744
今日推荐