数组元素与指针
本课属于 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 的过程中接触更高级的指针技巧做好准备。
挑战
简单编写一个 C 程序,演示如何使用指针表示法而不是传统的数组索引来访问数组元素。你的程序应当:
- 声明一个名为
values、包含 6 个元素的整数数组,并将其初始化为 {5, 15, 25, 35, 45, 55} - 使用 for 循环遍历数组中的所有元素
- 在循环中,使用指针表示法
*(values + i)访问每个元素(不要使用values[i]这样的方括号表示法) - 使用指针表示法访问方式打印每个元素
- 循环结束后,分别使用两种方法打印第三个元素(索引 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;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器