# C语言基础 · 第8章 数组 导读

数组是C语言中最基础也最重要的数据结构之一。如果说变量是"一个盒子",那么数组就是"一排整齐的柜子"——它能帮你一次性管理大量同类型的数据,而不用为每个数据单独起名。本章将从"为什么需要数组"讲起,带你彻底打通数组的概念与底层原理。

**第一部分:数组的诞生与定义**

课程首先回答一个根本问题:为什么要有数组?当你需要存储100个学生的成绩、1000个测量值时,逐个定义变量既不现实也不优雅。数组让你用一个名字管理一串数据。接下来你将学习如何声明和定义数组,包括初始化——比如`int arr[5] = {1, 2, 3, 4, 5};`或只写部分元素让其余自动补零——并了解C语言中各类初始化语法的细微差别。

**第二部分:内存视角下的数组**

数组在内存中占据一片**连续的存储空间**,这是理解数组一切行为的基石。你将通过图示和讲解,看清数组元素如何在内存中依次排列,理解下标与地址之间的换算关系。同时,课程会详细讲解`sizeof`运算符在数组上的表现——特别是数组名作为参数传入函数时,`sizeof`为何不再返回整个数组的大小——这是许多初学者反复踩坑的地方。

**第三部分:访问数组的两种方式**

数组有两种访问方式:最熟悉的下标法`arr[i]`,以及更体现C语言精髓的指针法`*(arr+i)`。课程将深入讲解数组名到底是什么——它是数组首元素的地址,但在某些语境下又会"变身"为代表整个数组的指针。通过`(&a)++`、`buf++`、`buf[3]++`等具体例子,你将彻底厘清数组名、指针变量与地址常量之间的微妙区别,搞清楚哪些可以自增、哪些不行。

**第四部分:数组与函数**

C语言中函数无法直接"接收"整个数组,只能通过传参的方式传递数组信息。课程回顾了普通传参与指针传参的区别,进而讲解如何正确地将数组传递给函数——你需要同时传递数组指针和数组长度两个信息,才能安全操作。这是实战中最常见的技能之一,务必掌握。

**第五部分:二维数组**

最后,课程将数组的概念扩展到二维。二维数组本质上是一维数组的嵌套,但它在内存中依然是连续排列的。你将以矩阵运算、表格数据处理等场景为切入点,学会声明、初始化与访问二维数组,为后续学习更复杂的数据结构打下坚实基础。

本章内容前后关联紧密,指针部分的细节尤其需要反复消化。建议边学边敲代码验证,在实践中建立对数组的直觉。祝你学习顺利!

课程目录

课程目录20 集
  • 1 为什么要数组 (25:56).mp4
  • 2 数组的声明、定义(初始化)1 (30:05).mp4
  • 3 数组的声明、定义(初始化)2 (32:24).mp4
  • 4 数组的赋值 (18:00).mp4
  • 5 数组在内存中的空间特点 (26:52).mp4
  • 6 使用 [ ] 访问数组元素 (19:04).mp4
  • 7 数组元素的指针 (33:24).mp4
  • 8 使用指针访问数组元素1 (34:07).mp4
  • 9 使用指针访问数组元素2 (30:21).mp4
  • 10 使用指针访问数组元素3 (30:12).mp4
  • 11 数组第一个元素指针的表示方法 (29:27).mp4
  • 12 10++可以吗 (30:23).mp4
  • 13 int a; (&a)++可以吗 (21:38).mp4
  • 14 (&buf[0])++、buf++, buf[3]++ (29:48).mp4
  • 15 sizeof与数组 (24:10).mp4
  • 16 数组名总结 (08:32).mp4
  • 17 函数普通传参回顾 (27:31).mp4
  • 18 函数指针传参回顾 (30:26).mp4
  • 19 传递数组指针(拆成两个) (48:12).mp4
  • 20 二维数组 (33:08).mp4