|
一、数组是什么? 数组就是“一排相同类型的储物柜” ️ 想象一下: 普通变量 = 一个单独的储物箱,只能放一件东西 数组 = 一整排编号的储物柜,每个小柜子(元素)都能放东西,而且所有柜子都放同一种东西 int score1, score2, score3, score4, score5; // 5个变量,麻烦!int scores[5]; // 一个数组,搞定!能存5个整数 二、数组的核心特性 数组有三个最重要的特点: 类型相同:所有元素必须是同一数据类型(全是int、全是float等) 连续存储:元素在内存中一个挨着一个,没有空隙 长度固定:一旦定义,大小就不能改变 三、如何定义数组? 语法很简单:类型 数组名[元素个数]; int a[5]; // 存放5个整数的数组float b[10]; // 存放10个小数的数组char c[20]; // 存放20个字符的数组 注意事项:数组长度必须是常量,不能是变量(C99标准后支持变长数组,但初学者先记住用常量)。 四、下标从0开始,千万别忘! 数组元素通过**下标(索引)**来访问,下标从0开始,不是从1开始! int a[5]; // 5个元素,分别是 a[0], a[1], a[2], a[3], a 最高下标是 数组长度 - 1,所以a[5]是越界的,访问它会出大问题! 五、数组的三种初始化方式 方式1:完全初始化(给所有元素赋值) int a[5] = {1, 2, 3, 4, 5};// a[0]=1, a[1]=2, a[2]=3, a[3]=4, a[4]=5 方式2:部分初始化(剩下的自动补0) int a[5] = {1, 2}; // a[0]=1, a[1]=2, a[2]=0, a[3]=0, a[4]=0 重要区别:如果完全不初始化,元素的值是随机的垃圾值! 方式3:省略长度(编译器自动计算) int a[] = {1, 2, 3, 4, 5}; // 自动推断长度为5 六、数组的访问和修改 int a[5] = {10, 20, 30, 40, 50};// 访问元素printf("%d", a[1](@ref); // 输出10printf("%d", a[11](@ref); // 输出30// 修改元素a[1] = 25; // 现在a[1]变成了25// 用循环批量处理for(int i = 0; i < 5; i++) {printf("%d ", a); // 输出所有元素} 关键点:数组不能整体操作,只能逐个操作每个元素。 七、计算数组长度(重要技巧) int a[5] = {1, 2, 3, 4, 5};int len = sizeof(a) / sizeof(a[1](@ref); // 总字节 ÷ 单个元素字节 = 元素个数printf("%d", len); // 输出5 这是一个非常常用的技巧,即使数组长度变了,代码也不用改! 八、新手最容易踩的3个坑 坑1:数组越界 int a[5];a[5] = 100; // 大错!有效下标是0~4,a[5]越界了! C语言不会自动检查数组是否越界,越界可能让程序崩溃,也可能偷偷修改其他变量的值,很难排查! 坑2:不给数组初始化就使用 int a[5];printf("%d", a[1]); // 输出随机垃圾值! 坑3:定义后企图用花括号批量赋值 int a[5];a = {1, 2, 3, 4, 5}; // 编译错误!只能在定义时这样用// 正确做法是逐个赋值或用循环 九、一个完整的例子 #include<stdio.h>int main() {// 定义并初始化数组int scores[5] = {85, 92, 78, 90, 88};// 计算数组长度int len = sizeof(scores) / sizeof(scores[1](@ref);// 计算总分int sum = 0;for(int i = 0; i < len; i++) { sum += scores; }printf("总分:%d\n", sum);printf("平均分:%.1f\n", (float)sum / len);return0;} 十、一句话总结 数组就是一组类型相同、连续存储、通过下标(从0开始)访问的数据集合。用循环配合数组,可以高效地批量处理大量数据。 记住:下标从0开始,千万别越界!多用sizeof(arr)/sizeof(arr[1])计算长度,养成好习惯! </stdio.h> 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |