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

使用sizeof()遍历数组求和时得到随机数值的原因解析

问题分析与解决

你遇到的这个随机求和结果,核心原因是对sizeof()的作用理解出现了偏差!

为什么会得到随机值?

在你的代码里,prime是一个int[5]类型的数组,sizeof(prime)返回的是整个数组占用的总字节数,而不是数组的元素个数。在绝大多数现代系统中,int类型占用4个字节,所以sizeof(prime)的结果是5 * 4 = 20。

这就导致你的for循环会执行20次(i从0到19),但你的数组只有5个有效元素(索引0到4)。当i超过4之后,你在访问数组的越界内存——这些内存区域里存储的是未初始化的随机垃圾数据,把这些随机值加到holder里,最终得到的自然是一个毫无意义的随机大数。

如何修正?

有两种简单的方式解决这个问题:

方法1:正确计算数组元素个数

用数组总字节数除以单个元素的字节数,就能得到准确的元素个数:

for (int i = 0; i < sizeof(prime)/sizeof(prime[0]); i++) {
    holder += prime[i];
}

这个方式的好处是兼容性好,在旧版C++里也能正常工作。

方法2:使用C++11及以上的范围for循环

如果你的编译器支持C++11或更高版本,范围for循环是更安全、更简洁的选择——编译器会自动遍历数组的所有元素,完全不需要手动计算长度:

#include <iostream>
int main() {
    int prime[5] = {2, 3, 5, 7, 11}; // 也可以直接初始化数组,更简洁
    int holder = 0;
    for (int num : prime) {
        holder += num;
    }
    std::cout << "The sum of the 5 prime numbers in the array is " << holder << std::endl;
}

修正后运行代码,就能得到正确的求和结果:2+3+5+7+11=28。

内容的提问来源于stack exchange,提问作者Shah Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:32:47