为什么在尝试迭代数组并使用 sizeof() 将总和相加时,我会得到一个完全随机的数字?

Sha*_*cob -2 c++

我试图获取数组的大小,将其用于 for 循环中的表达式,并在编译时获取随机总和。

#include <iostream>

int main()

{
    int prime[5];

    prime[0] = 2;
    prime[1] = 3;
    prime[2] = 5;
    prime[3] = 7;
    prime[4] = 11;

    int holder = 0;

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

    std::cout << "The sum of the 5 prime numbers in the array is " << holder << std::endl; 
}
Run Code Online (Sandbox Code Playgroud)

我得到的总和是1947761361. 为什么是这样?在这里使用该功能不应该sizeof()起作用吗?

Sme*_*eey 5

sizeof运算符返回其操作数在内存中的大小 - 对于数组,这是元素数乘以每个元素在内存中的大小 - 而不是数组中的元素数。为了你想要的sizeof(array)/sizeof(prime[0])

#include <iostream>

int main()

{
    int prime[5];

    prime[0] = 2;
    prime[1] = 3;
    prime[2] = 5;
    prime[3] = 7;
    prime[4] = 11;

    int holder = 0;

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

    std::cout << "The sum of the 5 prime numbers in the array is " << holder << std::endl; 
}
Run Code Online (Sandbox Code Playgroud)

  • `sizeof(prime)/sizeof(int)` -&gt; `sizeof(prime)/sizeof(prime[0])` 使代码更加面向未来。 (2认同)
  • 或者 `sizeof prime / sizeof *prime` (2认同)