指针和数组
本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 5 课,共 56 课。
数组和指针在 C++ 中有一种特殊的关系。声明数组时,数组名实际上会作为指向该数组第一个元素的指针。借助这种关联,你可以使用指针以强大的方式操作数组。
请看这个数组声明:
int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers; // ptr 现在指向 numbers[0]这里,numbers 等价于 &numbers[0],两者都会给出第一个元素的地址。指针 ptr 现在指向同一位置。
有了指向数组的指针后,你可以使用指针运算来遍历各个元素。指针加 1 会使它移动到下一个相同类型的元素:
ptr++; // 现在指向 numbers[1]
ptr = ptr + 2; // 现在指向 numbers[3]你可以在任意位置解引用指针来访问值:*ptr 可以获取当前位置的值,而 *(ptr + 1) 可以获取下一个元素的值。
这种指针与数组的关系让你可以使用指针而不是传统的基于索引的循环来遍历数组,为遍历数组提供了另一种方法。
挑战
简单编写一个程序,使用指针遍历数组并打印每个元素,以展示指针与数组之间的关系。
已提供以下数组:
int values[6] = {15, 23, 8, 42, 17, 31};你的程序应当:
- 创建一个名为
ptr的指针,使其指向values数组的第一个元素 - 使用指针运算遍历数组中的全部 6 个元素
- 在每个位置通过解引用指针来打印每个元素
- 使用指针运算将指针移到下一个元素(递增指针)
将每个元素单独打印在一行中,格式如下:
Element: [value]输出应按数组中的顺序显示全部 6 个元素,并通过解引用指针而非数组索引来访问它们。
亲手试试
#include <iostream>
using namespace std;
int main() {
// 给定的数组
int values[6] = {15, 23, 8, 42, 17, 31};
// TODO: 创建一个名为 'ptr' 的指针,指向数组的第一个元素
// TODO: 使用循环和指针运算遍历全部 6 个元素
// TODO: 解引用指针,输出每个元素
// TODO: 使用指针运算将指针移到下一个元素
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C++ 在线编译器