如何实现函数返回数组指定数字最后出现的address并处理NULL-pointer?
解决方案
问题分析
你当前的代码存在两个核心问题:
- 循环条件
i <= 6错误:数组ary长度为6,有效索引范围是0~5,越界访问会导致未定义行为 - 每次找到匹配项就立即打印,没有记录最后一次出现的地址,也未使用指针返回结果
实现思路
- 编写独立函数完成查找逻辑:函数接收数组、数组长度、目标数字,返回
int*类型(指向int的指针) - 遍历数组时,持续更新匹配元素的地址,最终保留最后一次出现的地址;若全程无匹配,返回
NULL(标准空指针常量) - 在主函数中调用该函数,通过判断返回值是否为
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
相关产品推荐
相关产品推荐

