You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用指针在数组中查找指定数字的程序问题求助

数组指针查找数字的程序问题修复

问题代码

用户提供的存在问题的代码如下:

#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时同时输出找不到和找到的信息)

错误原因分析

  1. 元素比较逻辑错误:ptrArr[*p]中,*p是当前指针指向的数组元素的值,不是索引。比如数组第一个元素是5,*p就是5,ptrArr[5]取的是数组第6个元素(索引5),完全偏离遍历当前元素的逻辑,应该直接用*p == *ptr1比较当前元素和目标值。
  2. 结束判断逻辑错误:if (*p == size)完全不合理,*p是数组元素的值,和数组大小size没有关联,无法用这个条件判断遍历是否结束。正确做法是在循环结束后判断是否找到目标。
  3. 索引计算错误:输出索引时用*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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:10:26