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

时间:2013-10-29 18:04:12

标签: 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;
}

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

  

前5个数字的总和为15

但显示

  

前5个数字的总和是2293687

但是当我将c设置为0时

它的核心工作

那有什么区别?

5 个答案:

答案 0 :(得分:14)

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

int c = 0;

未初始化的变量具有随机数,例如2293687-2199999,...(如果它未调用未定义的行为阅读它)

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

答案 1 :(得分:3)

如果您未将c设置为0,则可以采用任何值(从技术上讲,这是一个不确定的值)。如果你这样做

c = c + i;

然后您将i的值添加到可能是任何内容的内容中。从技术上讲,这是未定义的行为。实践中发生的事情是你不能依赖于那个计算的结果。

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

int i = 0;

或者您可以使用值初始化

int i{};
int j = int();

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

  

前5个数字的总和是2293687

这是因为没有初始化c,您将获得之前存储在该位置的值(垃圾值)。这将使yor程序的行为未定义。在程序中使用之前,必须先初始化c

int c= 0;

答案 4 :(得分:0)

因为当你这样做时:

int a,i,c;

因此实例化并初始化c,你还没有说出你想要它初始化的内容。这里的规则有点复杂,但它归结为两件事:

  1. 对于整数类型,如果未指定初始值设定项,则变量的值为 indeterminate
  2. 当您尝试读取未初始化的变量时,会引发未定义的行为