【考点 · 6级】指针基础 — 6级核心考点,存储变量内存地址的特殊变量。
【说人话】指针就是一个"地址牌",它不存值,存的是某个变量在内存里的门牌号。通过 * 解引用可以拿到地址对应的值,通过 & 可以获取变量的地址。指针最大的坑:野指针(未初始化的指针)和空指针解引用(nullptr)。
void swap(int* a, int* b),通过指针交换两个整数的值。#include<iostream>
using namespace std;
void swap(int* a, int* b) { // 参数是指针类型
int temp = *a; // 暂存a指向的值
*a = *b; // 把b指向的值赋给a指向的地址
*b = temp; // 把暂存的值赋给b指向的地址
}
int main() {
int x = 10, y = 20;
cout << "交换前: x=" << x << " y=" << y << endl;
swap(&x, &y); // 传入地址
cout << "交换后: x=" << x << " y=" << y << endl;
return 0;
}
// 输出: 交换前: x=10 y=20 交换后: x=20 y=10
*a、*b 解引用修改的是原变量的值,所以swap后x和y会交换。如果用值传递(int a, int b),函数内交换不影响外部。
int* p; *p = 5; ❌ 危险!int* 只能存 int 变量的地址,存 double 地址虽然能编译但类型不匹配,容易出错。if (p != nullptr),防止对空指针解引用。