C语言数组最小值查找函数无预期输出问题求助
问题分析与修复
核心错误点
- 函数传参错误:调用
find(board[6])时,传递的是数组越界的元素(数组下标从0开始,board[5]才是最后一个有效元素),而且find函数需要的是数组首地址(直接传数组名即可),不是单个int值。错误传参会导致函数内部访问非法内存,根本无法正确遍历数组。 - 多余的无效调用:
main里第一行find(board[6]);没有保存返回值,属于无意义的错误调用,还会额外执行一次错误的查找逻辑。
修正后的代码
#include<stdio.h> int find(int board[]); int main (){ int board[6] = {6, 2, 6, 99, 0, 2}; // 传递数组首地址,保存返回的最小值 int min_val = find(board); printf("最小值:%d", min_val); return 0; } int find(int board[]){ int minimum = board[0]; // 用第一个元素初始化最小值 // 从i=1开始循环,避免重复比较第一个元素 for(int i = 1; i < 6; i++){ if(minimum > board[i]){ minimum = board[i]; } } return minimum; }
额外优化说明
- 循环从
i=1开始即可,因为已经用board[0]初始化了最小值,无需重复比较。 - 原函数内的循环
printf会打印最小值的每一步变化,若只需要最终结果,可去掉该内部打印,仅在main中输出最终值。
内容的提问来源于stack exchange,提问作者JOHN BOURAS
相关产品推荐
相关产品推荐

