C语言数组基础教程

发布时间:2026/5/21 9:04:39

C语言数组基础教程 C语言数组教程数组是什么为什么要学数组在C语言中数组就是用来存储一组相同类型数据的有序集合。如果不用数组存储5个学生成绩需要写5个变量ints1,s2,s3,s4,s5;用数组只需要一行intscores[5];有了数组我们得以批量管理数据让代码更简洁更方便循环遍历能够处理大量的数据。一、一维数组最基础一维数组定义数据类型 数组名[数组长度];intarr[10];// 存放10个整数floatnum[5];// 存放5个小数charch[20];// 存放20个字符注意数组长度必须是常量一旦定义长度不能改变想加元素只能新建更大数组下标从 0开始2. 一维数组初始化1完全初始化intarr[5]{10,20,30,40,50};2部分初始化没赋值的元素自动为 0intarr[5]{10,20};// arr[0]10, arr[1]20, arr[2]0, arr[3]0, arr[4]03省略长度初始化intarr[]{1,2,3,4,5};// 自动识别长度为53. 数组元素访问语法数组名[下标]intarr[5]{10,20,30,40,50};printf(%d,arr[0]);// 输出 10printf(%d,arr[4]);// 输出 50/*注意数组下标越界会导致程序崩溃 长度为5下标只能是 0~4。*/4. 数组遍历#includestdio.hintmain(){intarr[]{10,20,30,40,50};intlensizeof(arr)/sizeof(int);//sizeof(arr)整个数组占用的总字节数//sizeof(int)单个 int 类型占用的字节数通常为 4//两者相除得到数组的元素个数for(inti0;ilen;i){printf(%d ,arr[i]);}return0;}运行结果 10 20 30 40 50数组在内存中是结构化的数据连续的内存空间基地址 base 0x0000 arr[0] arr[1] arr[2] arr[3] arr[4] 10 20 30 40 50 0x0000 0x0004 0x0008 0x000C 0x0010而arr[]之所以从0开始是因为其表示从指针arr开始的偏移量指针偏移arr → arr1 → arr2 → arr3 ┌───────┬───────┬───────┬───────┐ │ arr[0]│ arr[1]│ arr[2]│ arr[3]│ └───────┴───────┴───────┴───────┘ ↑ ↑ ↑ ↑ arr0 arr1 arr2 arr3二、二维数组表格数据二维数组定义数据类型 数组名[行数][列数];示例int arr[3][4]; // 3行4列二维数组初始化intarr[2][3]{{1,2,3},{4,5,6}};二维数组遍历#includestdio.hintmain(){intarr[2][3];for(inti0;i2;i){for(intj0;j3;j){printf(请输入 arr[%d][%d],i,j);scanf(%d,arr[i][j]);}}// 输出数组printf(\n输出结果\n);for(inti0;i2;i){for(intj0;j3;j){printf(%d ,arr[i][j]);}printf(\n);}return0;}运行结果 1 2 3 4 5 6三、初学者最常见错误避坑指南数组下标越界下标 0 或 下标 ≥ 数组长度 都会直接崩溃或报错。intarr[5];arr[10]100;// 崩溃C/C未初始化数组里是随机垃圾值不是 0用变量定义数组长度不规范intn5;intarr[n];// 不推荐但它能用是因为编译器开了 “扩展功能”但它不是标准 C考试、竞赛、正规项目都算错。 而它真正的坑在哪变长数组是在栈上开空间空间较小n 太大 → 直接栈溢出、程序崩掉而且不同编译器行为不一样如若不能初始化 int arr[n] {0}; 也会报错数组越界for(inti0;ilen;i)//错误应该是for(inti0;ilen;i)多了个等号就越界。C 语言不能直接用 “” 给数组赋值inta[2]{1,2};intb[2];ba;// ❌ 直接报错编译器直接报错数组不能被赋值。首地址是“死的”赋值的本质是把左边的数值放进右边的容器里数据类型好比有大小和不同形状从而存储方式不同的容器而数据就是我们要灌给它的东西数组无法改变大小而它的存储方式与 int[]、double[] 等所指的int,double等基础数据类型相同就可以看作大号的 int、double 的容器即它也是数据类型当然也遵循赋值的法则但a,b对于 C 语言来说是一个指针而且这两个指针是代表数组的首地址它已经被确定了是”死的“不能再用进行运算数组名 ≠ 指针但能 “退化” 成指针即只要一参与运算、赋值就自动变成指针所以想要复制数组只能循环逐个赋值。多维数组容易搞反行列比如arr[3][4]前面是行后面是列写反会逻辑混乱、越界。总结数组是相同类型数据的集合内存连续一维数组类型名[长度]下标从 0 开始二维数组表格形式[行][列]

相关新闻