0Pricing
C++ Academy · 课时

解引用与指针运算

通过指针读取内存,并使用指针运算遍历数组

解引用与指针运算 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。

通过指针读取

一元 * 运算符会读取指针所指向的值。

int x = 42;
int* p = &x;
std::cout << *p;   // 42

通过指针写入

您也可以在赋值语句的左侧使用 *p,向目标写入值。

*p = 100;
std::cout << x;   // 100

箭头运算符

对于指向结构体或类的指针,p->member 是 (*p).member 的简写。请使用箭头,这是约定用法。

struct Point { int x, y; };
Point pt{3, 4};
Point* p = &pt;
std::cout << p->x;   // 3

指针算术基础

您可以对指针加减整数。结果以元素大小为步长移动,而不是以字节为步长。

int a[5] = {10, 20, 30, 40, 50};
int* p = a;        // points to a[0]
p = p + 2;         // now points to a[2]
std::cout << *p;   // 30

遍历数组

指针算术可以模拟索引操作。a[i] 和 *(a + i) 完全相同,而且 p[i] 可用于任何指针。

int a[] = {1, 2, 3, 4};
int* p = a;
for (int i = 0; i < 4; ++i) {
    std::cout << *(p + i) << " ";
}

两个指针之差

对同一数组中的两个指针做减法,会得到它们之间相隔的元素数量,类型为 std::ptrdiff_t。

int a[5];
int* first = a;
int* last  = a + 5;
std::ptrdiff_t len = last - first;  // 5

比较指针

您可以使用 == 和 != 比较指针是否相等;只有当它们指向同一数组中的元素时,才能使用 < 比较顺序。

使用指针迭代

符合惯用写法的 C 风格迭代使用两个指针——起始指针和结束指针。

int a[] = {1, 2, 3, 4, 5};
for (int* p = a; p != a + 5; ++p) {
    std::cout << *p << " ";
}

允许指向末尾之后

您可以计算出指向最后一个元素之后一位的指针(即“结束”指针),但不能对它进行解引用。

指针算术的常见陷阱

常见错误包括:

  • 越过数组边界
  • 混用指针类型(int* + char*)
  • 忘记算术运算以元素为单位,而不是以字节为单位

优先使用迭代器或范围

现代 C++ 更倾向于使用迭代器和范围库,而不是直接进行原始指针算术。在 C API 和非常底层的代码中,指针仍然十分重要。

快速检查

如果 p 是一个 int*,指向一个 4 字节整数的开头,那么 p + 1 指向什么位置?

回顾

*p 可以读取或写入目标。p->member 访问结构体成员。指针算术以元素大小为步长移动。请谨慎使用——在现代代码中,迭代器和范围通常是更安全的选择。

常见问题解答

「解引用与指针运算」课时是免费的吗?

是的 — 「解引用与指针运算」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。

「解引用与指针运算」这节课中我会学到什么?

通过指针读取内存,并使用指针运算遍历数组 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C++ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「解引用与指针运算」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C++ Academy 课中编写并运行代码吗?

能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 原始指针与取地址运算符
  2. 解引用与指针运算
  3. nullptr 与空指针安全
  4. 何时使用指针而非引用
← 返回 C++ Academy