指针与引用
指针基础
什么是指针?
指针是一个变量,存储另一个变量的内存地址。
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;