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

如何使用printf()打印C语言自定义函数的运行结果?

代码存在的核心错误
  • sum类型定义错误:你写的int *sum = 0是定义了一个初始化为空的int型指针,后续sum += arr[i]是在给指针的地址值做偏移,不是做数值累加,最后对空指针解引用*sum会直接触发程序崩溃。累加和只需要定义为普通int类型变量,初始值设为0即可。
  • 数组长度计算逻辑完全错误:数组作为参数传入函数时会退化为指针,此时sizeof(*arr)得到的是数组单个int元素的大小(通常为4字节),根本不是数组的实际元素个数5,循环次数不对自然算不出正确结果。C语言中数组传参不会自带长度信息,必须额外将数组长度作为参数传入函数。
  • 调用写法语法错误:arr是main函数中定义的数组名,不是函数,不能加()做调用;且你定义的foo返回值是void,本身没有返回值,不能直接作为printf的参数传入。
正确实现方案

你可以根据需求选两种实现方式:

方式1:在foo函数内部直接打印结果

只需要修正上述逻辑错误即可,代码如下:

#include <stdio.h>

// 新增len参数传入数组实际长度
void foo(int arr[], int len){
    int sum = 0; // 普通int类型存累加和
    int product = 1;
 
    for(int i = 0; i < len; i++){
        sum += arr[i];
    }
    for(int i = 0; i < len; i++){
        product *= arr[i];
    }

    printf("数组元素和:%d\n", sum);
    printf("数组元素乘积:%d\n", product);
}

int main(){
    int arr[] = {1,2,3,4,5};
    // 在数组定义的作用域内计算长度:总空间大小/单个元素大小
    int arr_len = sizeof(arr) / sizeof(arr[0]);
    foo(arr, arr_len);
    return 0;
}

方式2:将计算结果返回main函数,通过main里的printf打印

C语言函数单次只能返回一个值,要同时拿到和与乘积,可以通过指针参数将结果带回main,代码如下:

#include <stdio.h>

// res_sum、res_product是输出参数,用来把计算结果带回调用处
void foo(int arr[], int len, int *res_sum, int *res_product){
    int sum = 0;
    int product = 1;
 
    for(int i = 0; i < len; i++){
        sum += arr[i];
    }
    for(int i = 0; i < len; i++){
        product *= arr[i];
    }
    *res_sum = sum;
    *res_product = product;
}

int main(){
    int arr[] = {1,2,3,4,5};
    int arr_len = sizeof(arr) / sizeof(arr[0]);
    int sum, product;
    // 传入变量地址,让foo把结果写入对应内存
    foo(arr, arr_len, &sum, &product);
    // 此处直接用printf打印结果即可
    printf("数组元素和:%d\n", sum);
    printf("数组元素乘积:%d\n", product);
    return 0;
}

注意:永远不要在数组传参后的函数内部用sizeof计算数组长度,数组退化是C语言的基础特性,这种写法得到的结果永远不是你想要的数组实际长度。

内容的提问来源于stack exchange,提问作者Augustin Negura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:24:31