下标越界检查?关与c语言

来源:百度知道 编辑:UC知道 时间:2024/07/01 04:03:29
c语言中数组,系统不做下标越界检查,下标越界检查是什么意思,下标越界?求教!

就是指数组的索引值([]中的数字)超过了所定义数组的元素个数。
比如:
定义有
int a[3] = {0, 1 ,2};
则所定义的数组的元素个数就为3,由于C语言的数组索引(其实也就是你所说的下标)是从0开始计数的,所以就有
a[0]=0;
a[1]=1;
a[2]=2;
那么你让下标为3,就属于下标越界了。
a[3]=? //a[3]的值不可控制
给a[3]赋值,危险!

当然还有这样的越界a[-1],a[-2],....
看起来有点怪,但这种越界确实也会发生!特别是用变量作为数组下标时。

然而C语言并不会对下标越界进行检查(为了效率),所以编译时编译器并不会指出这种错误,可是若对如a[3]这样下标越界的数据进行修改,则可能使程序运行时产生异常甚至导致程序无法继续运行而退出!

上面的说得对极了
说得通俗一点:
引用上面的例子: 定义了数组a[3],你能用的最大只能是
a[2](因为下标是从0开始)如果你的程序里出现a[3] = 2;之类的语句那就是下标越界了
这时程序会使用未知的内存(很危险噢)程序运行时产生异常导致程序无法继续运行而退出!
所以你要避免这种错误 即需要“下标越界检查”
但编译时编译器是不会检查这种错误的
明白?

是不是指的溢出啊?