为什么数组是 C 语言的一道坎?
学完指针和内存模型,很多初学者在“数据组织”这一步会感到眩晕。之前的变量都是独立的个体,而数组要求你同时理解“一串连续的空间”和“如何通过名字或地址访问其中的每一个格子”。本章解决的核心问题不是数组语法本身,而是厘清数组名在 C 语言中那种模棱两可的双重身份:它既是整个数组的首地址常量,又在特定场景下退化为普通指针。如果你曾疑惑过为什么数组传给函数后会“丢失长度”,或者分不清数组下标访问与指针偏移的本质联系,这一章就是为你补这块缺口的。
适合具备基础语法意识、但对内存布局还停留在概念层面的学习者。不需要精通指针,但必须理解变量在内存中的存储方式。建议优先攻克第 1 至 6 节,建立数组声明、初始化及内存连续性的直观认知;随后重点啃下第 7 至 16 节,这是本章最难也最核心的部分,涉及元素指针、多维寻址、自增运算合法性以及 sizeof 陷阱。第 17 节关于函数传参的回顾,则是为了验证你是否真正理解了数组作为参数传递时的“退化”现象,务必结合前文指针内容对照学习。
学完能独立做什么?
完成本章后,你将不再畏惧包含数组的程序设计题。你能独立写出高效的一维数组处理逻辑,比如在不增加额外空间的情况下反转数组,或者手动实现字符串复制(基于字符数组)。更重要的是,你能看懂复杂的指针运算表达式,如 `*(ptr + i)` 与 `ptr[i]` 的等价性转换,并能准确判断哪些指针操作是合法的、哪些会导致未定义行为。面对 `sizeof(arr)` 与 `sizeof(ptr)` 结果不同的经典面试题,你能从内存模型角度给出清晰解释,而不是死记硬背结论。
资料包中的视频讲解并非孤立存在,而是配合了大量的内存图示与代码演示。建议在学习过程中,每看完一节都要手动画出对应的内存状态图,特别是在讲解指针访问数组元素的章节。不要只看不写,尝试用不同形式的指针算术访问同一个数组元素,观察输出是否一致。练习时遇到报错,先不要急着改代码,而是回到第 5 节重温数组在内存中的空间特点,理解编译器是如何计算地址的。这种“画图—编码—验证—复盘”的闭环,是攻克 C 语言底层逻辑最高效的路径。
课程目录
1 为什么要数组 (25:56) 2 数组的声明、定义(初始化)1 (30:05) 3 数组的声明、定义(初始化)2 (32:24) 4 数组的赋值 (18:00) 5 数组在内存中的空间特点 (26:52) 6 使用 [ ] 访问数组元素 (19:04) 7 数组元素的指针 (33:24) 8 使用指针访问数组元素1 (34:07) 9 使用指针访问数组元素2 (30:21) 10 使用指针访问数组元素3 (30:12) 11 数组第一个元素指针的表示方法 (29:27) 12 10++可以吗 (30:23) 13 int a; (&a)++可以吗 (21:38) 14 (&buf[0])++、buf++, buf[3]++ (29:48) 15 sizeof与数组 (24:10) 16 数组名总结 (08:32) 17 函数普通传参回顾 (27:31) 18 函数指针传参回顾 (30:26) 19 传递数组指针(拆成两个) (48:12) 20 二维数组 (33:08)





