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

C语言中将数组传递给函数计算元素和时出现错误如何解决

问题根因

C语言中,数组作为函数参数传递时会自动退化为指针,函数参数列表里的int arr[]和int *arr是完全等价的。你在add函数中使用sizeof(arr)计算得到的是指针的内存占用大小,而非整个数组的总大小。
以你当前运行环境为例:指针占8字节,int类型占4字节,因此sizeof(arr)/sizeof(arr[0])的计算结果为2,循环仅执行2次,累加了arr[0]=1和arr[1]=2,最终得到结果3,和编译警告提示的问题完全对应。

修复方案

通用解决方案是在调用求和函数时,额外传递数组的长度作为参数,修改后的代码如下:

#include <stdio.h>
// 新增参数len接收数组长度
int add(int arr[], int len);

int main(void)
{
    int nums[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 };
    // 在main函数中计算数组长度,此时nums还未退化为指针,计算结果正确
    int len = sizeof(nums)/sizeof(nums[0]);
    int result = add(nums, len);
    printf("Result: %d\n", result);
    return 0;
}

int add(int arr[], int len)
{
    int total = 0;
    int i;
    // 直接使用传入的长度控制循环次数
    for (i = 0; i < len; i++) {
        total += arr[i];
    }
    return total;
}

修改后运行输出的结果为1023,和预期的数组元素总和一致。


内容的提问来源于stack exchange,提问作者Code With Faraz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:03:04