指针基础
概念讲解
什么是指针?
指针是存储内存地址的变量。
基本概念
123456int a = 10;
int* p = &a; // p 指向 a
cout << *p << endl; // 10
*p = 20; // 修改 a 的值
cout << a << endl; // 20指针与数组
12345int a[] = {1, 2, 3, 4, 5};
int* p = a; // p 指向数组首元素
cout << *(p + 1) << endl; // 2
cout << p[1] << endl; // 2引用
12345int a = 10;
int& b = a; // b 是 a 的别名
b = 20;
cout << a << endl; // 20考点分析
初赛考查方式
- 选择题: 指针概念
- 程序阅读: 指针操作
- 填空题: 指针与数组
常见题型
- 指针操作
- 指针与数组
- 引用
例题精讲
例题 1:指针操作
题目: 以下代码的输出是什么?
1234int a = 10;
int* p = &a;
*p = 20;
cout << a;解答:
p 指向 a
*p = 20 修改 a 的值
输出:20例题 2:引用
题目: 以下代码的输出是什么?
1234int a = 10;
int& b = a;
b = 20;
cout << a;解答:
b 是 a 的别名
b = 20 修改 a 的值
输出:20练习题
- 指针和引用的区别是什么?
查看答案
| 特性 | 指针 | 引用 |
|---|---|---|
| 本质 | 存储地址的变量 | 变量的别名 |
| 初始化 | 可以不初始化 | 必须初始化 |
| 可以为空 | 可以(nullptr) | 不可以 |
| 可以改变指向 | 可以 | 不可以 |
| 语法 | int* p = &a |
int& b = a |
- 以下代码的输出是什么?
123int a[] = {1, 2, 3};
int* p = a;
cout << *(p + 2);查看答案
3
p指向数组首元素a[0]p + 2指向a[2]*(p + 2)解引用得到a[2]的值,即 3
- 如何用指针实现 swap 函数?
查看答案
123456789void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 调用
int x = 10, y = 20;
swap(&x, &y);或使用引用:
123456789void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
// 调用
int x = 10, y = 20;
swap(x, y);易错点
⚠️ 注意:
- 指针存储的是地址
- * 是解引用运算符
- & 是取地址运算符
- 引用是别名,不是新变量