指针基础

概念讲解

什么是指针?

指针是存储内存地址的变量。

基本概念

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. 选择题: 指针概念
  2. 程序阅读: 指针操作
  3. 填空题: 指针与数组

常见题型

  • 指针操作
  • 指针与数组
  • 引用

例题精讲

例题 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

练习题

  1. 指针和引用的区别是什么?
查看答案
特性 指针 引用
本质 存储地址的变量 变量的别名
初始化 可以不初始化 必须初始化
可以为空 可以(nullptr) 不可以
可以改变指向 可以 不可以
语法 int* p = &a int& b = a
  1. 以下代码的输出是什么?
123int a[] = {1, 2, 3};
int* p = a;
cout << *(p + 2);
查看答案

3

  • p 指向数组首元素 a[0]
  • p + 2 指向 a[2]
  • *(p + 2) 解引用得到 a[2] 的值,即 3
  1. 如何用指针实现 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);

易错点

⚠️ 注意:

  1. 指针存储的是地址
  2. * 是解引用运算符
  3. & 是取地址运算符
  4. 引用是别名,不是新变量