学习目标

  • 深入理解指针
  • 掌握动态内存管理
  • 避免常见内存错误

2.1 指针基础

int x = 10;
int *p = &x;    // p 指向 x
*p = 20;        // 通过指针修改 x

printf("x = %d\n", x);      // 20
printf("&x = %p\n", &x);    // 地址
printf("p = %p\n", p);      // 地址
printf("*p = %d\n", *p);    // 20

2.2 数组与指针

int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;   // 数组名即指针

// 等价访问
arr[2] == *(arr + 2) == *(p + 2) == p[2]

2.3 动态内存

#include <stdlib.h>

// 分配内存
int *p = (int*)malloc(10 * sizeof(int));
if (p == NULL) {
    // 处理错误
}

// 使用内存
for (int i = 0; i < 10; i++) {
    p[i] = i;
}

// 释放内存
free(p);
p = NULL;  // 避免悬空指针

2.4 常见错误

// 1. 内存泄漏
int *p = malloc(100);
// 忘记 free(p)

// 2. 悬空指针
int *p = malloc(100);
free(p);
*p = 10;  // 错误!

// 3. 越界访问
int arr[10];
arr[10] = 0;  // 错误!

实践练习

实现动态数组(可自动扩容)。

下一步

第 3 章:数据结构实现

更新时间: