C ++中未初始化变量的默认值是什么?

时间:2015-03-27 22:06:02

标签: c++

下面,您会看到一个非常简单的程序:

#include <stdlib.h>
#include <iostream>

using namespace std;

int main()
{
    int r;
    int c;
    int d;

    cout<<"r="<<r<<endl<<"c="<<c<<endl<<"d="<<d;
    return 0;
}

问题是,为什么在输出中c的值与rd的值不同?

enter image description here

当我在屏幕上更改打印顺序时,值会更改!

#include <stdlib.h>
#include <iostream>

using namespace std;

int main()
{
    int r;
    int c;
    int d;

    cout<<"c="<<c<<endl<<"r="<<r<<endl<<"d="<<d;    

    return 0;
}

enter image description here

为什么这次r的价值与其他人不同?我只是改变了在屏幕上打印它们的顺序!

2 个答案:

答案 0 :(得分:5)

  

C ++中未初始化变量的默认值是什么

对于基本类型的局部变量,默认值是不确定的。

  

问题是,为什么在输出中c的值与r和d的值不同?

因为读取未初始化的变量具有未定义的行为。

  

当我改变cout行中变量的顺序时,值会改变!

如果您对此感到惊讶,那么您还没有理解未定义的行为或未指定的值意味着什么。

未初始化值的值可以是任何值,对代码的任何更改,编译器的更改,处理器的更改甚至月亮的高度*都可能会改变垃圾。或者它可能不会。在这种情况下,确实如此。

*在大多数c ++编译器中不太可能是一个功能

答案 1 :(得分:1)

函数中声明的未初始化变量的值未定义。

全局变量将设置为0(如果不是数字,则等效)。