Skip to content

指针与引用

指针基础

什么是指针?

指针是一个变量,存储另一个变量的内存地址。

c
int x = 10;
int *p = &x;    // p 指向 x

printf("x的值: %d\n", *p);   // 解引用,输出 10
printf("x的地址: %p\n", p);  // 输出地址

指针运算

c
int arr[] = {1, 2, 3, 4, 5};
int *p = arr;

p++;        // 指向下一个元素
*p;         // 访问当前元素

引用(C++)

引用是变量的别名,必须初始化且不能改变绑定。

cpp
int x = 10;
int &ref = x;   // ref 是 x 的引用

ref = 20;       // x 也变成 20

指针 vs 引用

特性指针引用
是否可为空可以(NULL/nullptr)不可以
是否可以重新赋值可以不可以
是否需要解引用需要(*p)不需要
sizeof指针大小原变量大小

常见面试题

指针和引用的区别

  • 指针是独立的变量,存储地址;引用是别名
  • 指针可以为空,引用必须初始化
  • 指针可以改变指向,引用不能

野指针和悬空指针

  • 野指针:未初始化的指针
  • 悬空指针:指向已释放内存的指针
cpp
// 避免野指针
int *p = nullptr;

// 释放后置空
delete p;
p = nullptr;

基于 MIT 许可发布