C语言数组求最值函数接收NULL参数时如何返回-1?
C语言数组最值函数NULL参数处理方案
核心修改逻辑
在array_min和array_max函数入口优先做参数合法性校验:
- 若传入的数组指针为
NULL,直接返回-1 - 额外补充数组长度校验,若数组长度小于等于0也直接返回-1,避免数组越界访问问题
修改后完整代码
#include <stdio.h> int array_min(const int [], const int); int array_max(const int [], const int); int main() { int input_arr[] = {2,3,4,5,6}; printf("%d\t", array_min(input_arr, 5)); // 输出:2 printf("%d\t", array_max(input_arr, 5)); // 输出:6 printf("%d\t", array_max(NULL, 5)); // 预期输出:-1 return 0; } int array_min(const int input_arr[], const int arr_size) { // 新增参数校验逻辑 if (input_arr == NULL || arr_size <= 0) { return -1; } int a, min = input_arr[0]; for(a = 0; a < arr_size; a++) { if(input_arr[a] < min) { min = input_arr[a]; } } return min; } int array_max(const int input_arr[], const int arr_size) { // 新增参数校验逻辑 if (input_arr == NULL || arr_size <= 0) { return -1; } int a, max = input_arr[0]; for(a = 0; a < arr_size; a++) { if(input_arr[a] > max) { max = input_arr[a]; } } return max; }
注意事项
当前方案严格按照作业要求返回-1作为非法参数的标识,如果后续需要区分数组本身存在-1和参数非法两种场景,可以改为用返回值标识执行状态、用指针参数输出最值的形式实现。
内容的提问来源于stack exchange,提问作者Paul Atreides
相关产品推荐
相关产品推荐

