wordpress 媒体插件朝阳区搜索优化seosem
🌱 什么是指针?
指针就是一个变量,专门用来存储“地址”。
在 C++ 中,每个变量在内存中都有一个地址,指针就是用来保存这个地址的。
✍️ 一个简单的例子
#include <iostream>
using namespace std;int main() {int a = 10; // 普通变量int* p = &a; // 指针变量,保存a的地址cout << "a 的值是: " << a << endl;cout << "a 的地址是: " << &a << endl;cout << "p 保存的地址是: " << p << endl;cout << "p 指向的值是: " << *p << endl;return 0;
}
🧠 输出解释:
-
a
是一个普通的整数变量。 -
&a
是a
的地址。 -
p
是一个“指向 int 类型”的指针。 -
*p
是“p 指向的那个地址里的值”,也就是a
的值。
🎯 图示理解(假装这是内存):
变量名 | 值 | 地址 |
---|---|---|
a | 10 | 0x1234 |
p | 0x1234 | 0x5678 |
你可以想象指针就像一张藏宝图,p
是藏宝图,*p
是藏起来的宝贝(也就是 a 的值)。
📌 小练习:
你可以试试看下面这段代码,然后修改 a
的值或者加一个新变量看看输出会怎样:
int b = 20;
int* q = &b;
cout << *q << endl;
🧩 第一部分:指针和数组的关系
🌟 核心概念:
-
数组名
arr
在表达式中会自动转成一个指向首元素的指针。 -
int arr[3] = {10, 20, 30}; int* p = arr; // 等价于 int* p = &arr[0];
💡 你可以这样访问数组
-
cout << arr[0] << " " << *(p + 0) << endl; // 都是 10 cout << arr[1] << " " << *(p + 1) << endl; // 都是 20
小练习
-
int arr[5] = {1, 2, 3, 4, 5}; int* p = arr; for (int i = 0; i < 5; i++) {cout << *(p + i) << " "; }
🎁 第二部分:指针传参(函数参数)
🧠 为什么用指针?
因为函数参数默认是“值传递”,对参数的改动不会影响外面。但指针可以“传地址”,直接修改原数据!
🔧 示例:交换两个数
-
void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp; }int x = 5, y = 10; swap(&x, &y); cout << x << " " << y; // 输出 10 5
📚 第三部分:指针和函数的配合(数组传参)
🎯 实战:数组求和
-
int sum(int* arr, int size) {int total = 0;for (int i = 0; i < size; i++) {total += arr[i];}return total; }int nums[4] = {2, 4, 6, 8}; cout << sum(nums, 4); // 输出 20
🚀 第四部分(进阶):指针的指针
🌀 概念:
-
一个指针变量本身也有地址,所以我们可以用另一个指针来指向它——这就叫做“指针的指针”。
-
int a = 100; int* p = &a; int** pp = &p;cout << a << endl; // 100 cout << *p << endl; // 100 cout << **pp << endl; // 100
🧠 应用场景(了解):
-
二维数组
-
修改函数参数中的指针
-
动态内存管理(堆上的数组、链表)
-
🗂️ 总结学习路线
阶段 内容 练习建议 入门 数组和指针 用指针遍历数组 基础 指针传参 写 swap、求和、反转 提升 指针函数参数 自己封装数组工具函数 进阶 指针的指针 学链表、二维数组
🎯 C++ 指针实战练习套题
✅ Level 1:基础理解(数组和指针)
🧪 练习 1:用指针输出数组中的所有元素
要求: 定义一个数组,使用指针遍历并输出。
int arr[5] = {5, 10, 15, 20, 25}; // 用指针 p 输出所有元素
🌱 提示: 定义 int* p = arr;
然后用 *(p + i)
访问。
🧪 练习 2:修改数组中的值(指针版)
要求: 把数组中所有值乘 2,然后输出。
int nums[4] = {1, 2, 3, 4}; // 用指针修改 nums 里的值
✅ Level 2:指针传参 + 函数操作
🧪 练习 3:写一个 swap()
函数,用指针交换两个整数
要求: 写一个 void swap(int* a, int* b);
函数,交换两个数。
🧪 练习 4:用函数 + 指针传参反转数组
要求: 写一个 reverse(int* arr, int size)
函数,反转数组内容。
int a[5] = {1, 2, 3, 4, 5}; reverse(a, 5); // 结果应该是 5 4 3 2 1
🧪 练习 5:写一个 findMax(int* arr, int n)
函数,返回数组中最大值
✅ Level 3:进阶挑战(指针的指针 & 多维数组)
🧪 练习 6:使用指针的指针修改变量的值
要求:
void changeValue(int** p) { **p = 999; }
调用方式:
int a = 10; int* p = &a; changeValue(&p);
🧪 练习 7:用指针访问二维数组
int matrix[2][3] = { {1, 2, 3}, {4, 5, 6} }; // 用指针访问每个元素并输出