使用指针在数组中查找指定数字的程序问题求助
数组指针查找数字的程序问题修复
问题代码
用户提供的存在问题的代码如下:
#include <iostream> using namespace std; void FindNumber(int *ptrArr, int size, int *ptr1) { for (int *p = ptrArr; p < ptrArr + size; ++p) { if (ptrArr[*p] == *ptr1) { cout << "Number (" << *ptr1 << ") found in the array with an index of: " << *p; break; } if (*p == size) { cout << "No such number in given array\n"; } } } int main () { int numbers[10] = {5, 4, 7, 10, 24, 15, 8, 2, 9, 13}; int num; cout << "What number do you want to search for?\n"; cin >> num; FindNumber(numbers, sizeof(numbers) / sizeof(int), &num); return 0; }
运行异常表现
程序运行时出现多种错误:
- 数组存在目标数字却提示找不到
- 找到数字时输出错误索引
- 出现重复提示(如查找7时同时输出找不到和找到的信息)
错误原因分析
- 元素比较逻辑错误:
ptrArr[*p]中,*p是当前指针指向的数组元素的值,不是索引。比如数组第一个元素是5,*p就是5,ptrArr[5]取的是数组第6个元素(索引5),完全偏离遍历当前元素的逻辑,应该直接用*p == *ptr1比较当前元素和目标值。 - 结束判断逻辑错误:
if (*p == size)完全不合理,*p是数组元素的值,和数组大小size没有关联,无法用这个条件判断遍历是否结束。正确做法是在循环结束后判断是否找到目标。 - 索引计算错误:输出索引时用
*p是错误的,*p是元素值,正确索引应为当前指针p与数组首指针ptrArr的差值p - ptrArr,指针相减得到的是元素偏移量,也就是索引。
修正后的代码
#include <iostream> using namespace std; void FindNumber(int *ptrArr, int size, int *ptr1) { bool found = false; for (int *p = ptrArr; p < ptrArr + size; ++p) { // 直接比较当前指针指向的元素和目标值 if (*p == *ptr1) { // 用指针减法计算正确索引 cout << "Number (" << *ptr1 << ") found in the array with an index of: " << (p - ptrArr) << endl; found = true; break; } } // 循环结束后统一判断是否找到,避免重复输出 if (!found) { cout << "No such number in given array\n"; } } int main () { int numbers[10] = {5, 4, 7, 10, 24, 15, 8, 2, 9, 13}; int num; cout << "What number do you want to search for?\n"; cin >> num; FindNumber(numbers, sizeof(numbers) / sizeof(int), &num); return 0; }
代码说明
- 新增
found布尔变量标记是否找到目标,避免循环中错误的中途判断 - 用
*p == *ptr1直接比较当前元素和目标值,符合遍历逻辑 - 用
p - ptrArr计算正确索引,这是指针操作中获取数组索引的标准方式 - 将未找到的提示放在循环结束后,确保只输出一次结果
内容的提问来源于stack exchange,提问作者levaldssandis
相关产品推荐
相关产品推荐

