Menu
CoddyTech

数组元素与指针

本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 8 课,共 63 课。

现在你已经了解数组名称如何作为指针工作,可以运用这些知识,以完全不同的方式访问数组元素。你可以使用指针表示法来实现相同的效果,而不是使用熟悉的方括号表示法,例如 array[i]。

关键在于,array[i] 与 *(array + i) 完全等价。当你写下 array + i 时,就是在告诉 C 从数组开头向前移动 i 个位置。然后,解引用运算符 * 会获取该位置的值。

int numbers[5] = {10, 20, 30, 40, 50};
// 这两行代码的作用完全相同:
printf("%d", numbers[2]);    // 输出 30
printf("%d", *(numbers + 2)); // 也输出 30

这种指针表示法之所以可行,是因为 C 会根据数据类型的大小自动计算正确的内存地址。将 2 加到整数数组指针上时,C 会向前移动 2 × sizeof(int) 个字节,正好指向第三个元素。

理解这种等价关系后,你就能灵活地处理数组,也能为学习 C 的过程中接触更高级的指针技巧做好准备。

challenge icon

挑战

简单

编写一个 C 程序,演示如何使用指针表示法而不是传统的数组索引来访问数组元素。你的程序应当:

  1. 声明一个名为 values、包含 6 个元素的整数数组,并将其初始化为 {5, 15, 25, 35, 45, 55}
  2. 使用 for 循环遍历数组中的所有元素
  3. 在循环中,使用指针表示法 *(values + i) 访问每个元素(不要使用 values[i] 这样的方括号表示法)
  4. 使用指针表示法访问方式打印每个元素
  5. 循环结束后,分别使用两种方法打印第三个元素(索引 2),以演示两种表示法等价:
    • 先使用指针表示法:*(values + 2)
    • 然后使用传统的数组表示法:values[2]

你的输出应按以下格式显示结果:

Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25

这个挑战会测试你对 array[i] 和 *(array + i) 等价性的理解,展示指针算术如何通过计算内存地址来访问数组元素,而不是使用传统的索引方式。

亲手试试

#include <stdio.h>

int main() {
    // TODO:在这里编写你的代码
    // 声明并初始化包含 6 个元素的数组 'values'
    // 使用 for 循环,通过指针表示法 *(values + i) 打印每个元素
    // 循环结束后,分别用指针表示法和数组表示法打印第三个元素
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C 在线编译器