为什么我需要将int变量初始化为0?

Mil*_*ita 3 c++

我刚刚制作了这个程序,要求输入5到10之间的数字,然后计算这里输入的数字的总和就是代码

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int a,i,c;
    cout << "Enter the number between 5 and 10" << endl;
    cin >> a;
    if (a < 5 || a > 10)
    {
        cout << "Wrong number" << endl;
        system("PAUSE");
        return 0;
    }
    for(i=1; i<=a; i++)
    {
        c=c+i;
    }
    cout << "The sum of the first " << a << " numbers are " << c << endl;
    system("PAUSE");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我输入数字5,它应该显示

前5个数字的总和是15

但它显示出来

前5个数字的总和是2293687

但是当我把c设为0时

它的核心工作

那么区别是什么呢 ?

mas*_*oud 14

因为C++不会自动为您设置零.所以,你应该自己初始化它:

int c = 0;
Run Code Online (Sandbox Code Playgroud)

未初始化的变量具有随机数,如2293687,-21,99999,...(如果它不调用未定义行为读书时)

此外,static变量将设置为其默认值.在这种情况下0.


jua*_*nza 6

如果您没有设置c0,则它可以采用任何值(从技术上讲,一个不确定的值)。如果你然后这样做

c = c + i;

那么你正在将 的价值添加i到可能是任何东西的东西上。从技术上讲,这是未定义的行为。在实践中发生的情况是您不能依赖该计算的结果。

在 C++ 中,非静态或全局内置类型在“默认初始化”时没有执行初始化。为了零初始化 an int,您需要明确:

int i = 0;
Run Code Online (Sandbox Code Playgroud)

或者您可以使用值初始化

int i{};
int j = int();
Run Code Online (Sandbox Code Playgroud)

  • @unknown6656 那将是一个函数声明。 (2认同)

Pau*_*oub 5

根据定义,非静态变量是未初始化的——它们的初始值是未定义的。

在另一个编译器上,您可能每次都会得到正确的答案、另一个错误的答案或不同的答案。

C/C++ 不会做您没有要求他们做的额外工作(初始化为零至少涉及一两条指令)。