C语言调用arrCalc函数后无打印输出,该如何修正代码?
问题定位
- 主函数中声明的
*max、*min、*sum、*isEven、*avg均为未指向有效内存的野指针,在arrCalc中对这些指针直接解引用会触发内存访问异常,程序直接崩溃退出,因此没有任何打印输出 arrCalc函数定义存在语法错误,函数头末尾缺少左大括号{sum未初始化就执行累加操作,isEven未初始化,若数组中无偶数会返回随机值- 代码缺少必要的头文件
stdio.h,printf函数无法正常调用
修正后完整可运行代码
#include <stdio.h> void arrCalc(int*, int, int*, int*, int*, double*, int*); int main() { int a[5] = {1, 2, 3, 4, 5}, n = 5; // 定义普通变量存储结果,而非野指针 int max, min, sum, isEven; double avg; // 传入变量的地址给函数 arrCalc(a, n, &max, &min, &sum, &avg, &isEven); printf("%d %d %d %lf %d", max, min, sum, avg, isEven); return 0; } void arrCalc(int *arr, int n, int *max, int *min, int *sum, double *avg, int *isEven) { // 补全缺失的左大括号 int i; *min = arr[0]; *max = arr[0]; // 初始化sum和isEven避免随机值 *sum = 0; *isEven = 0; for (i = 0; i < n; i++) { if (arr[i] < *min) *min = arr[i]; if (arr[i] > *max) *max = arr[i]; if (!(arr[i] % 2)) *isEven = 1; *sum += arr[i]; } *avg = (double) *sum / n; }
运行输出
5 1 15 3.000000 1
内容的提问来源于stack exchange,提问作者YahavB
相关产品推荐
相关产品推荐

