You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:24:06