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

为何这段C代码无法统计数组元素个数?如何实现输出结果3?

问题分析与修复方案

你的代码无法正确统计数组长度的核心原因是:把int数组当作字符串处理了。字符串依赖'\0'(ASCII值为0的字符)作为终止标记,但你定义的int数组{1,5,3}末尾并没有这个终止值,循环会越界访问数组外的内存,导致结果不可控。

下面提供两种可行的修复方式:

方法一:传递数组长度(推荐)

C语言中数组作为函数参数时会退化为指针,无法直接通过指针获取原数组的长度。因此最安全的方式是在调用函数时主动传递数组长度。

修改后的代码:

#include <stdio.h>

int counter(int arr[], int length)
{
    int c = 0;
    for (int i = 0; i < length; i++)
    {
        c++;
    }
    return c;
}

int main()
{
    int a[] = { 1, 5, 3 };
    // 通过sizeof计算数组长度:总字节数 ÷ 单个元素字节数
    int arr_length = sizeof(a) / sizeof(a[0]);
    int d = counter(a, arr_length);
    printf("%d ", d);

    return 0;
}

方法二:手动添加终止值(不推荐)

如果一定要用终止标记的方式,可以在int数组末尾添加一个不会出现在正常元素中的值(比如0),但这种方法有局限性——如果数组本身包含0元素,统计结果会出错。

修改后的代码示例:

#include <stdio.h>

int counter(int arr[])
{
    int c =0;
    // 用0作为终止标记,注意数组末尾必须添加0
    for (int i = 0; arr[i] != 0; i++)
    {
        c = c + 1;
    }
    return c;
}

int main()
{
    // 数组末尾添加0作为终止符
    int a[] = { 1, 5, 3, 0 };
    int d = counter(a);
    printf("%d ", d);

    return 0;
}

优先推荐方法一,它不受数组元素值的限制,是C语言中统计数组长度的标准做法。

内容的提问来源于stack exchange,提问作者Harry Raj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:53:23