前置知识: C++

C++ 指针

00:00
2 min Intermediate

智能指针、原始指针、指针运算与内存安全。

1. 指针基础

指针存储内存地址的变量

 int x = 10; // 声明一个整数变量
 int* p = &x; // 声明一个指向整数的指针,指向 x 的地址
 *
 std::cout << x; // 输出 20

2. 指针的类型

指针类型描述示例
int*指向整数指针int* p = &x;
double*指向双精数的指针double* d = &pi;
char*指向字符指针char* c = &ch;
void*通用指针(无类型void* v = &x;
const int*指向常量整数的指针const int* cp = &x;
int* const常量指针指针本身不可修改int* const pc = &x;
const int* const指向常量常量指针const int* const cpc = &x;

3. 指针的运算

 int arr[] = {1, 2, 3, 4, 5};
 int* p = arr; // 指向数组的第一个元素
 std::cout << *p << std::endl; // 输出 1
 std::cout << *(p + 1) << std::endl; // 输出 2
 std::cout << *(p + 2) << std::endl; // 输出 3
 // 指针算术
 p++; // 指针向后移动一个元素(4 字节)
 std::cout << *p << std::endl; // 输出 2
 p--; // 指针向前移动一个元素
 std::cout << *p << std::endl; // 输出 1

4. 空指针和野指针

 // 空指针
 int* p1 = nullptr; // C++11 推荐使用
 int* p2 = NULL; // 传统方式
 // 野指针(危险!)
 int* p3; // 未初始化的指针,指向随机内存
 *
 // 检查指针是否为空
 if (p1 != nullptr) {
  *p1 = 10;
 }

5. 指针与函数

 // 指针作为函数参数(传地址)
 void increment(int* p) {
  (*p)++;
 }
 int main() {
  int x = 10;
  increment(&x);
  std::cout << x; // 输出 11
  return 0;
 }
 // 指针作为函数返回值
 int* create_array(int size) {
  return new int[size];
 }

6. 指针数组和数组指针

 // 指针数组:数组元素是指针
 int* ptrs[5]; // 5 个指向整数的指针
 // 数组指针:指向数组的指针
 int arr[5] = {1, 2, 3, 4, 5};
 int (*p)[5] = &arr; // 指向包含 5 个整数的数组的指针
 // 访问数组指针
 std::cout << (*p)[0] << std::endl; // 输出 1
 std::cout << (*p)[1] << std::endl; // 输出 2

更新日志 (Changelog)

  • 2026-05-27: 从 C13_103 拆分,专注于指针相关内容

延伸阅读

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式