大家好这是我的 CSDN 第二篇博客。上一篇主要是简单自我介绍记录一下自己的学习路线。从这一篇开始我想慢慢整理 C 语言里的核心知识点方便自己复习也希望能帮到同样在学习的同学。说到 C 语言很多人第一个头大的知识点就是指针。但其实指针并没有那么可怕而且数组、字符串这两个高频考点本质上都和指针紧紧绑在一起。今天这篇文章我就从指针基础开始一步步延伸到数组再到字符串把这三块内容串成一个整体。一、先搞懂最基础的指针指针可以说是 C 语言的灵魂也是很多初学者的第一道坎。我们先把最核心的概念说清楚。1. 指针是什么一句话指针变量是用来存放「内存地址」的变量。普通变量存的是数值指针变量存的是“某个变量在内存里的门牌号”。2. 两个最关键的符号- 取地址符拿到变量的地址- * 解引用符通过地址找到原来的变量3. 最简单的指针示例c#include stdio.hint main() {int a 10;int *p a; // p 存放 a 的地址printf(a %d\n, a);printf(通过指针访问 a %d\n, *p);*p 20; // 通过指针修改 aprintf(修改后 a %d\n, a);return 0;}通过这段代码可以明白操作 *p 本质上就是在操作变量 a 。二、从指针自然过渡到数组理解指针之后再看数组你会发现数组就是指针的一种“固定用法”。1. 数组名是什么在 C 语言里数组名 ≈ 指向数组首元素的常量指针比如int arr[5] {1,2,3,4,5};这里的 arr 本身就代表 arr[0] 也就是数组第一个元素的地址。2. 下标写法与指针写法完全等价下面这两种写法在编译器眼里是一模一样的- arr[i]- *(arr i)也就是说数组下标本质就是指针偏移。3. 用指针遍历数组c#include stdio.hint main() {int arr[5] {10, 20, 30, 40, 50};int *p arr;for (int i 0; i 5; i) {printf(arr[%d] %d\n, i, *(p i));}return 0;}看到这里应该能感觉到数组和指针根本不是两个孤立的知识点它们底层是同一套逻辑。三、再延伸字符串就是特殊的字符数组数组懂了字符串就更简单了。1. 字符串的本质C 语言里没有专门的“字符串类型”字符串其实就是以 \0 结尾的字符数组。2. 两种表示字符串的方式① 字符数组形式char str1[] hello;本质是数组内容可以修改。② 字符指针形式char *str2 world;本质是指针指向常量字符串一般不建议修改。3. 用指针遍历字符串#include stdio.hint main() {char *str hello, c language;while (*str ! \0) {printf(%c , *str);str;}return 0;}这里 str 不断往后移动逐个输出字符直到遇到结束符 \0 停止。这也是很多 C 语言面试里很基础的手写题。四、总结三者关系为了方便记忆我自己总结了一句话- 指针是基础负责地址与访问- 数组是连续内存 指针偏移- 字符串是带 \0 结束符的字符数组 / 字符指针可以说不理解指针就学不明白数组和字符串理解了指针后面这两块一通百通。五、小结与后续计划这篇主要是把指针 → 数组 → 字符串这条主线梳理了一遍没有讲特别偏、特别难的内容重在打基础、理关系。后面我计划继续写- 指针进阶指针数组、数组指针、函数指针- 动态内存分配malloc、free- 结构体与指针结合使用如果你也在学习 C 语言欢迎一起交流哪里写得不对或者不清晰的地方也欢迎指出共同进步~