比较指针
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 10 课,共 63 课。
你已经学会了如何使用指针运算遍历数组。现在你将了解,指针也可以使用与普通变量相同的关系运算符进行比较:==、!=、< 和 >。
比较两个指针时,你比较的是它们的内存地址。当两个指针都指向同一个数组中的元素时,这尤其有用,因为这样可以确定它们在内存中的相对位置。
int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers; // 指向第一个元素
int *end = numbers + 4; // 指向最后一个元素
if (start < end) {
printf("start comes before end in memory");
}在循环条件中,指针比较尤其有用。你可以比较当前指针位置和目标指针,而不是使用计数器变量,以控制循环何时停止。这样可以编写简洁高效的数组遍历代码。
关键在于,ptr1 < ptr2 表示 ptr1 指向的元素在数组中的位置早于 ptr2 指向的元素。这种关系很适合用指针比较来控制按顺序处理数组的循环。
挑战
简单编写一个 C 程序,使用指针比较遍历数组,并找出指定范围内的元素。你的程序应该:
- 声明一个名为
scores、包含 8 个元素的整数数组,并用值 {45, 78, 92, 63, 87, 34, 91, 56} 初始化它 - 声明两个指向整数的指针:
start_ptr和end_ptr - 设置
start_ptr,使其指向数组的第一个元素 - 使用指针运算设置
end_ptr,使其指向数组的最后一个元素 - 声明一个名为
current_ptr的指针,并将其初始化为指向第一个元素 - 使用带有指针比较(
current_ptr <= end_ptr)的 while 循环遍历数组 - 在循环中:
- 检查当前值是否在 60 到 90 之间(包括 60 和 90)
- 如果值在范围内,准确输出
Value [value] is in range - 如果值不在范围内,准确输出
Value [value] is out of range - 递增
current_ptr,移动到下一个元素
- 循环结束后,使用指针比较检查
current_ptr > end_ptr,以确认current_ptr现在已经指向数组末尾之后的位置 - 如果条件为真,准确输出
Traversal complete
你的输出应按以下格式显示结果:
Value 45 is out of range
Value 78 is in range
Value 92 is out of range
Value 63 is in range
Value 87 is in range
Value 34 is out of range
Value 91 is out of range
Value 56 is out of range
Traversal complete这个挑战将检验你对循环条件中的指针比较运算符的理解、使用指针运算设置边界指针的方法,以及与传统的基于计数器的循环相比,指针比较如何能更简洁地控制数组遍历。
亲手试试
#include <stdio.h>
int main() {
// TODO:在下方编写你的代码
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器