C 指针
指针存储变量或对象的内存地址,是 C 语言的核心特性之一。本章系统介绍指针的声明、解引用、指针算术、指向数组/函数/结构体的指针等。
1. 基本概念
c
int x = 42;
int *p = &x; // p 保存 x 的地址
printf("%d\n", *p); // 解引用2. 空指针与野指针
- 空指针:
NULL或nullptr(C23) - 野指针:未初始化或悬空(指向已释放内存)
3. 指针与数组
c
int a[3] = {10,20,30};
int *p = a; // 数组名衰变为指向首元素的指针
printf("%d\n", *(p+1)); // 204. 指针算术
- 对
T*指针加减 n,会跳过n * sizeof(T)字节 - 仅在同一数组(或尾后位置)范围内进行算术是定义良好的
5. 多级指针
c
int x = 1; int *p = &x; int **pp = &p; **pp = 5;6. 指向函数的指针(预告)
c
int add(int,int);
int (*fp)(int,int) = add;
printf("%d\n", fp(2,3));详见“函数指针与回调函数”章节。
7. 指向结构体的指针与 ->
c
struct Point { int x,y; } s = {1,2};
struct Point *ps = &s;
printf("%d\n", ps->x);8. const 与指针
const int *p:指向常量的指针(不能改所指对象)int *const p:常量指针(指针本身不可改)const int *const p:两者皆不可改
9. 常见陷阱
- 返回局部变量地址
- 解引用空/野指针
- 越界访问
10. 小结
指针强大但也危险,务必初始化、边界检查、搭配内存管理与所有权习惯使用。