C 语言从 0 入门(十一)|指针基础:定义、解引用、指针与变量
大家好我是网域小星球。前面我们学习了数组、函数、变量等基础内容代码能力已经可以完成大多数基础程序。而从这一篇开始我们正式进入 C 语言最核心、最具特色、也是最难的知识点指针。指针是 C 语言的灵魂也是后续学习结构体、函数参数、动态内存、数据结构的基础。很多新手觉得指针难其实是没抓住本质。本篇用最通俗、最系统、最适合入门的方式精讲指针基础全程 VS2022 可直接运行零基础也能看懂。目录一、本章学习目标二、什么是指针三、两个核心符号 和 *1. 取地址符 2. 解引用符 *五、指针与变量的基本使用四、指针变量的定义语法五、指针与变量的基本使用六、指针经典案例交换两个变量的值七、空指针与野指针1. 空指针 NULL2. 野指针八、本章高频易错点九、本章核心总结下期预告一、本章学习目标学完本篇你将彻底掌握指针的本质指针就是地址指针变量的定义、初始化、赋值取地址符与解引用符*的用法指针与普通变量的关系空指针、野指针的概念与避坑指针的简单应用变量值交换、函数传参思路高频易错点总结二、什么是指针一句话指针就是内存地址。我们可以这样理解电脑内存就像一排房间每个房间都有房间号地址变量就放在某个房间里指针就是记录这个房间号的变量所以指针 地址指针变量 用来存放地址的变量三、两个核心符号 和 *1. 取地址符 作用获取变量在内存中的地址。int a 10; printf(%p, a); // 输出 a 的地址2. 解引用符 *作用通过地址找到对应内存里的值。int a 10; int *p a; printf(%d, *p); // 输出 10简单记完整示例VS2022 可直接运行五、指针与变量的基本使用九、本章核心总结下期预告下一篇我们将揭开数组与指针的深层关系数组名就是首地址用指针可以遍历数组、操作元素写法更简洁高效也是笔试面试高频考点。变量→ 拿地址*指针→ 拿地址里的值四、指针变量的定义语法格式类型名 *指针变量名;示例int *p; // 指向 int 类型变量的指针 char *c; // 指向 char 类型 double *d; // 指向 double 类型含义int *p表示 p 里面存的是一个 int 变量的地址指针的类型必须和指向变量的类型一致五、指针与变量的基本使用完整示例VS2022 可直接运行#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h int main() { int a 100; int *p a; // p 存放 a 的地址 printf(a %d\n, a); printf(a %p\n, a); printf(p %p\n, p); printf(*p %d\n, *p); // 通过指针修改变量 a *p 200; printf(修改后 a %d\n, a); return 0; }运行结果类似a 100 a 000000xxxxxx p 000000xxxxxx *p 100 修改后 a 200结论*修改p 等价于修改 a 本身。六、指针经典案例交换两个变量的值不使用指针很难真正理解 “地址操作”这个案例是指针入门必做。#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h void swap(int *x, int *y) { int temp *x; *x *y; *y temp; } int main() { int a 10, b 20; printf(交换前a%d, b%d\n, a, b); swap(a, b); printf(交换后a%d, b%d\n, a, b); return 0; }运行结果交换前a10, b20 交换后a20, b10这就是地址传递也是指针最经典的用途。七、空指针与野指针1. 空指针 NULL表示指针不指向任何有效空间。int *p NULL;安全、规范、不会乱访问内存。2. 野指针指针没有初始化指向随机地址极其危险。int *p; // 野指针 *p 10; // 程序崩溃新手一定要避免。八、本章高频易错点混淆*在定义和使用时的区别int *p定义时表示这是指针*p 10使用时表示取值类型不匹配int*指向char变量野指针未初始化直接使用空指针解引用*NULL崩溃误以为指针是整型直接赋值数字函数传参时不用指针导致值无法交换指针本质就是内存地址取地址*解引用取值指针变量存储地址通过*p操作原变量指针是 C 语言实现 “地址传递” 的核心空指针安全野指针危险指针是学习数组、结构体、函数进阶的必经之路