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

如何实现函数返回数组指定数字最后出现的address并处理NULL-pointer?

解决方案

问题分析

你当前的代码存在两个核心问题:

  • 循环条件i <= 6错误:数组ary长度为6,有效索引范围是0~5,越界访问会导致未定义行为
  • 每次找到匹配项就立即打印,没有记录最后一次出现的地址,也未使用指针返回结果

实现思路

  1. 编写独立函数完成查找逻辑:函数接收数组、数组长度、目标数字,返回int*类型(指向int的指针)
  2. 遍历数组时,持续更新匹配元素的地址,最终保留最后一次出现的地址;若全程无匹配,返回NULL(标准空指针常量)
  3. 在主函数中调用该函数,通过判断返回值是否为NULL处理未找到的情况

完整代码

#include <stdio.h>

// 查找目标数字最后一次出现的地址,未找到返回NULL
int* findLastOccurrence(int arr[], int arrLength, int target) {
    int* lastAddr = NULL; // 初始化空指针,表示未找到
    for (int i = 0; i < arrLength; i++) {
        if (arr[i] == target) {
            lastAddr = &arr[i]; // 更新为当前匹配元素的地址
        }
    }
    return lastAddr;
}

int main(void) {
    int target = 3;
    int ary[6] = {1, 3, 7, 8, 3, 9};
    int arrLength = sizeof(ary) / sizeof(ary[0]); // 计算数组长度

    int* result = findLastOccurrence(ary, arrLength, target);
    if (result != NULL) {
        printf("最后一次出现的地址:%p\n", result);
        printf("对应的值:%d\n", *result); // 通过指针访问对应的值
    } else {
        printf("未找到目标数字,返回NULL指针\n");
    }

    return 0;
}

关键细节说明

  • 指针与地址:&arr[i]用于获取数组第i个元素的内存地址,赋值给int*类型变量存储
  • NULL指针:NULL是标准库定义的空指针常量,用于表示"无有效地址"的状态,判断返回值result != NULL即可知道是否找到目标
  • 数组长度计算:sizeof(ary)/sizeof(ary[0])通过总字节数除以单个元素字节数,得到数组实际长度,避免硬编码出错
  • 高效优化:如果数组规模较大,可以从数组末尾向前遍历,找到第一个匹配项后直接返回地址,减少遍历次数:
    int* findLastOccurrence(int arr[], int arrLength, int target) {
        for (int i = arrLength - 1; i >= 0; i--) {
            if (arr[i] == target) {
                return &arr[i];
            }
        }
        return NULL;
    }
    

内容的提问来源于stack exchange,提问作者JohnDoe12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:50:26