下面的 C 程序创建了一个具有固定数量元素的数组。即使我们再分配三个超过最大数组元素数量的值也能正常工作。
#include <stdio.h>
int main(){
//declares a fixed sized array
int balance[5];
//initializing
balance[0] = 1;
balance[1] = 2;
balance[2] = 3;
balance[3] = 4;
balance[4] = 5;
//three more
balance[5] = 6;
balance[6] = 7;
balance[7] = 8;
printf("%d \n", balance[0]);
printf("%d \n", balance[1]);
printf("%d \n", balance[2]);
printf("%d \n", balance[3]);
printf("%d \n", balance[4]);
printf("%d \n", balance[5]);
printf("%d \n", balance[7]);
//and it works fine!
return 0;
}
但是当我们尝试分配三个以上的元素时它会抛出异常
#include <stdio.h>
int main(){
//declares a fixed sized array
int balance[5];
//initializing
balance[0] = 1;
balance[1] = 2;
balance[2] = 3;
balance[3] = 4;
balance[4] = 5;
//three more
balance[5] = 6;
balance[6] = 7;
balance[7] = 8;
//one more again
balance[8] = 9;
printf("%d \n", balance[0]);
printf("%d \n", balance[1]);
printf("%d \n", balance[2]);
printf("%d \n", balance[3]);
printf("%d \n", balance[4]);
printf("%d \n", balance[5]);
printf("%d \n", balance[7]);
printf("%d \n", balance[8]);
//throws an exception!
return 0;
}
但是在使用整数文字声明和初始化数组后,我们可以插入更多元素而不会出错。
#include <stdio.h>
int main(){
//declares and initialize a fixed sized array
int balance[5] = {1,2,3,4,5};
//let's add few more
balance[5] = 6;
balance[6] = 7;
//and even more
balance[7] = 8;
balance[8] = 9;
balance[9] = 10;
printf("%d \n", balance[0]);
printf("%d \n", balance[1]);
printf("%d \n", balance[2]);
printf("%d \n", balance[3]);
printf("%d \n", balance[4]);
printf("%d \n", balance[5]);
printf("%d \n", balance[6]);
printf("%d \n", balance[7]);
printf("%d \n", balance[8]);
printf("%d \n", balance[9]);
//and it works fine!
return 0;
}
C语言出现这种行为的原因是什么?
最佳答案
当您尝试越界访问数组时,您的代码会调用未定义行为,这是不安全的内存,因此结果是未定义的。
关于c - 在 C 中初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30035863/