未初始化的变量会发生什么? C++ [重复]

问题描述 投票:0回答:3
int main()
{    
    int a;
    cout << a;
    return 0;
}

我想知道为什么输出值 0。我认为如果一个变量未初始化,它会输出一个垃圾值。

但是,我还记得听说整数的默认值为 0,所以我有点困惑。

c++ variables initialization
3个回答
6
投票

C++ 中未初始化函数作用域(即本地)整数的默认行为是不确定,这很好; 但是如果在定义之前使用该值,则会引入未定义的行为,并且任何事情都可能发生 - 恶魔可能会从你的鼻子里飞出来

cppreference 上的此页面提供了默认整数行为的示例。

另一方面,所有非局部、线程局部变量,而不仅仅是整数,

都是零初始化。但这个案例没有包含在你原来的例子中。

(旁注:无论如何,简单地初始化变量并完全避免潜在危险通常被认为是良好的做法......特别是以

全局变量的形式。)

在极少数特殊情况下,例如某些嵌入式系统,使用全局变量的最佳实践也有例外;它在启动时或在初始循环迭代期间根据传感器读数初始化值...并且需要在循环范围结束后保留一个值。


2
投票
我认为您对给出的答案/评论不满意,也许您可以尝试以下代码:

#include <iostream> using namespace std; int main(){ int a,b,c,d,e,f,g,h,i,j; cout<<a<<endl; cout<<b<<endl; cout<<c<<endl; cout<<d<<endl; cout<<e<<endl; cout<<f<<endl; cout<<g<<endl; cout<<h<<endl; cout<<i<<endl; cout<<j<<endl; return 0; }
    

0
投票
原因是,变量获得垃圾值(对程序来说未知/无意义的值)是当有人运行程序时,它被加载到 RAM 的某些部分。现在这一切都取决于之前为某个位置设置的值,可能是之前存在的其他程序。 只是碰巧你的程序已加载到该位置,而 RAM 中的值恰好为 0,这就是你得到的回报。

如果重新启动系统并尝试运行相同的程序,那么您很可能会得到垃圾值。

以上语句对于编译器未初始化的变量有效。

© www.soinside.com 2019 - 2024. All rights reserved.