C语言练习题-指针实现数组元素查找(返回指针+指针减法求下标)

发布时间:2026/10/10 8:49:45
C语言练习题-指针实现数组元素查找(返回指针+指针减法求下标)
一、题目介绍题目要求编写C语言函数实现在整型数组中查找指定数值第一次出现的位置。函数返回值为元素指针找到返回对应元素地址找不到返回 NULL禁止单纯返回下标数字核心考察指针使用在主函数中通过指针减法计算元素下标输出位置信息函数原型int*find(int*arr,intn,inttarget);测试用例数组{5, 2, 8, 2, 9, 1}查找目标2预期输出找到了是第2个元素二、核心考察知识点本题是数组指针高频经典考题完全适配零基础进阶、期末复习、C语言指针专项训练不涉及算法、字符串、结构体纯语法重难点指针作为函数返回值数组名本质数组首元素指针指针减法运算求数组下标核心用法空指针 NULL 的规范使用地址与数值的区分操作三、解题思路遍历数组循环遍历数组所有元素匹配目标值匹配成功直接返回当前匹配元素的地址 arr[i]匹配失败遍历结束未找到返回空指针 NULL计算下标利用 指针 - 数组首指针得到元素下标C语言专属特性结果判断通过指针是否为NULL区分查找成功/失败四、完整可运行代码#includestdio.h// 查找函数返回目标元素的指针找不到返回NULLint*find(int*arr,intn,inttarget){// 遍历整个数组for(inti0;in;i){// 匹配到目标值if(arr[i]target){// 返回当前元素的地址returnarr[i];}}// 遍历结束无匹配返回空指针returnNULL;}intmain(){// 定义测试数组inta[6]{5,2,8,2,9,1};// 待查找的目标值inttarget2;// 接收函数返回的指针int*pfind(a,6,target);// 判断查找结果if(pNULL){printf(未找到目标元素\n);}else{// 指针减法计算元素下标intindexp-a;// index从0开始位置需要1printf(找到了是第%d个元素\n,index1);}return0;}五、运行结果找到了是第2个元素六、逐行深度解析1.自定义查找函数int*find(int*arr,intn,inttarget)• 返回值 int *代表函数返回一个整型指针内存地址• 形参 int *arr数组传参本质是传首元素地址等价于 int arr[]• n数组长度target需要查找的目标数值匹配返回地址if(arr[i]target){returnarr[i];}• arr[i]访问数组元素数值• arr[i]取出当前元素的内存地址• 找到第一个匹配元素立即返回保证查找首次出现位置查找失败返回空指针returnNULL;• NULL 是空指针代表指针不指向任何有效内存• 是C语言规范的「查找失败、地址无效」标识核心难点指针减法求下标intindexp-a;• p目标元素的地址• a数组名代表数组首元素地址• 同类型指针相减 中间间隔的元素个数不是字节数• 完美替代循环计数是指针高阶经典用法位置输出修正数组下标从 0 开始日常计数从 1 开始所以最终位置需要 index 1。七、高频易错点总结易错点1混淆「元素值」和「元素地址」• arr[i] 是数值arr[i] 是地址• 函数要求返回指针必须返回地址不能返回数值易错点2不懂指针减法原理很多新手会用循环计数记录下标不理解指针 - 首地址 下标 是C语言专属高效写法也是考试必考考点。易错点3不判空指针如果不判断 p NULL直接解引用 *p找不到元素时会触发野指针错误程序崩溃。八、拓展变式期末常考修改代码查找最后一次出现的目标元素位置修改函数统计目标元素总共出现的次数纯指针遍历不使用[]下标完成查找九、总结数组传参本质是指针传参数组名是首元素地址指针可以作为函数返回值实现地址返回同类型指针相减结果为元素间隔个数下标NULL 是空指针用于标记无效地址避免野指针报错