【C语言详解】数组越界
我们知道数组中每个元素都有自己的下标,同时数组中元素个数是确定的,所以下标自然也有范围限制。
-
一维数组越界:
C语言规定一维数组下标从0开始,如果数组中有n个元素,那么最后一个元素的下标一定是(n-1)。在通过下标访问一维数组的时候,如果下标小于0,或者大于(n-1),该访问操作超出了一维数组的合法空间。这就是一维数组越界。 -
二维数组越界同理。
C语言规定行/列下标都从0开始,如果二维数组中有m*n个元素,那么最后一行的下标一定是(m-1),最后一列的下标一定是(n-1)。在通过下标访问二维数组的时候,如果行/列下标小于0,或者大于(m-1)/(n-1),该访问操作超出了二维数组的合法空间。这就是二维数组越界。 -
但要注意的是:C语言不做数组越界的检查,所以即使写代码时数组越界,编译器不会报错(好的编译器可能会警告),但此时程序正常运行不代表程序是正确的!!!这就需要我们自己做好数组越界检查。
代码演示:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i <= 10; i++)
{
printf("%d ", arr[i]);
//数组中有10个元素,下标范围0~9。
//当i = 10,数组被越界访问。
//编译器编译代码通过,程序正常运行,但程序不正确。
}
return 0;
}
运行结果: