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
相关产品推荐
相关产品推荐

