c - 在 C 中初始化数组

标签 c arrays runtime-error

下面的 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/

相关文章:

c - 为什么这个使用 fork() 和 wait() 的程序在我运行时输出 201?

c# - 列表中的数组

java - 为什么此 Activity 会意外关闭我的 Android?

r - 尝试加载大型(4GB+ 音频文件)时 readBin() 中出现无效的 'n' 参数错误

c - CvMat 类型属性的返回类型是 1111638021 而不是 5 或 6..指针错误?

c++ - 如何确保在不满足条件时不运行特定代码

c++ - 为 C++ 编译时找不到符号,但为 C 找到了

PHP mySQL 查询返回单个字段作为 2 元素数组

javascript - 如何将数组的值附加到 Javascript 中的 SQL 语句

c - 变量 'head' 未经初始化链表 c 使用