c++ 为什么我需要将一个int变量初始化为0?

8cdiaqws  于 11个月前  发布在  其他
关注(0)|答案(5)|浏览(143)

我只是做了这个程序,要求输入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时,它可以正常工作。
有什么区别吗?

vxf3dgd4

vxf3dgd41#

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

int c = 0;

字符串
未初始化的变量有一个随机数,如2293687-2199999,.(如果它在阅读时没有调用 * 未定义行为 *)
另外,static变量将被设置为它们的默认值。在本例中为0

z4bn682m

z4bn682m2#

如果不将c设置为0,它可以接受任何值(技术上讲,是一个不确定的值)。
c = c + i;
那么你就把i的值加到了一个可能是任何值的东西上。从技术上讲,这是一种 * 未定义的行为 *。实际上,你不能依赖于计算的结果。
在C++中,非静态或全局内置类型在“default initialized”时没有初始化。为了零初始化int,您需要显式:

int i = 0;

字符串
也可以使用 value initialization

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

8dtrkrch

8dtrkrch3#

根据定义,非静态变量是未初始化的-它们的初始值是未定义的。
在另一个编译器上,你可能会得到正确的答案,另一个错误的答案,或者每次都得到不同的答案。
C/C++不做额外的工作(初始化为零至少涉及一两条指令),你没有要求他们做。

wljmcqd8

wljmcqd84#

前5个数字的总和是2293687
这是因为如果不初始化c,你会得到以前存储在那个位置的值(垃圾值)。这将使你的程序的行为未定义。你必须在程序中使用它之前初始化c

int c= 0;

字符串

ojsjcaue

ojsjcaue5#

因为当你这样做的时候:

int a,i,c;

字符串
因此示例化和初始化c,你还没有说你想要它初始化为什么。这里的规则有点复杂,但它归结为两件事:
1.对于整型,如果你没有指定初始化器,变量的值是 * 不确定的 *
1.当你试图读取一个未初始化的变量时,你会调用Undefined Behavior

相关问题