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

C语言数组相加代码输出随机值的原因咨询

C语言数组相加代码输出随机值的原因咨询

嘿,我来帮你拆解一下你代码里的问题,为啥会输出那些奇怪的随机值~

首先最核心的问题是数组下标越界,这在C语言里属于非常危险的“未定义行为”:

  • 你定义的int numbers[3];,意思是这个数组只能容纳3个元素,有效下标是0、1、2(C语言数组从0开始计数)。但你代码里却给numbers[3] = 5;和median[3] = 44;赋值——这两个下标已经超出了数组的内存范围,这部分内存不属于你的数组,可能存着系统的临时数据、其他变量的残留值,甚至会破坏其他内存区域的数据,这直接导致你的计算基础就错了。
  • 同样的,你定义int sum[3];后,直接给sum[3]赋值,也是越界操作,这时候sum[3]存的完全是不可控的垃圾值。

其次是printf的使用错误:
你写的printf("sum=%d",sum);里,sum是数组名,在C语言里数组名会被自动转换成指向数组首元素的指针地址。而你用%d格式符去打印一个指针地址,就会把这个地址的数值当成整数输出,这就是你看到的那些9位/10位奇怪数字的来源——它根本不是你要的相加结果,而是数组在内存里的地址值。

给你修正一下代码,你可以参考:

#include <stdio.h>
int main() {
    // 把数组长度改成4,这样下标0-3都合法
    int numbers[4];
    int median[4];
    int sum[4];
    
    // 给数组的有效下标赋值
    numbers[0] = 1;
    numbers[1] = 3;
    numbers[2] = 7;
    numbers[3] = 5;
    
    median[0] = 1;
    median[1] = 12;
    median[2] = 10;
    median[3] = 44;
    
    // 逐个对应下标相加并打印
    for(int i = 0; i < 4; i++){
        sum[i] = numbers[i] + median[i];
        printf("sum[%d] = %d\n", i, sum[i]);
    }
    
    return 0;
}

最后提醒一下:C语言不会自动检查数组下标是否越界,所以写代码时一定要注意数组长度和下标的对应关系,越界操作的结果完全不可预测,轻则输出乱码,重则导致程序崩溃甚至更严重的问题。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 09:30:27