数组编程中的常见错误
(1)定义数组时,数组长度要用常量或常量表达式,不能用变量。
int a[5]; //ok 用常量定义数组大小
const int length=5; int a[length]; //ok 用常变量定义数组大小
#define LENGTH 5
int a[5]; //ok 用符号常量定义数组大小
int n; n=10; int a[n]; //error 不能用变量定义数组大小
int n; n=10; const int length=n; int a[n]; //error
(2)数组访问是不能越界
int a[5]; // 数组下标为0~4 对应数组元素a[0]~a[4]
int i;
for(i=0;i<=5;i++)
cin>>a[i]; //error ,当i=5时,a[5]不是a数组中元素,访问过界
一定要注意下标变化范围,以上错误很容易找,以下错误不太容易找
int a[5];
int i;,t
for(i=0;i<5;i++)
if(a[i]<a[i+1]){t=a[i]; a[i]=a[i+1]; a[i+1]=t;} //error, 注意i=4时,虽然a[i]合法,但a[i+1]不合法,所以错误很隐蔽,不容易找
并且这种错误编译时不会出错,出错都发生在运行时,是运行时错误,有的时候会中断程序(跳出中断提示框),有的时候会使程序结果不对,尤其用循环对数组下标进行控制时一定要注意。
(3)数组下标必须是整形,不能是浮点类型
double i;
int a[5];
for(i=0;i<5;i++)
cin>>a[i]; //error ,错误原因,数组下标不允许是浮点类型
改为
int i;
int a[5];
for(i=0;i<5;i++)
cin>>a[i]; //ok