Skip to content

C 指针

指针存储变量或对象的内存地址,是 C 语言的核心特性之一。本章系统介绍指针的声明、解引用、指针算术、指向数组/函数/结构体的指针等。

1. 基本概念

c
int x = 42;
int *p = &x; // p 保存 x 的地址
printf("%d\n", *p); // 解引用

2. 空指针与野指针

  • 空指针:NULLnullptr(C23)
  • 野指针:未初始化或悬空(指向已释放内存)

3. 指针与数组

c
int a[3] = {10,20,30};
int *p = a;         // 数组名衰变为指向首元素的指针
printf("%d\n", *(p+1)); // 20

4. 指针算术

  • 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. 小结

指针强大但也危险,务必初始化、边界检查、搭配内存管理与所有权习惯使用。

本站内容仅供学习和研究使用。