未初始化的变量会发生什么情况?C++; intmain() { INTA; CUT< P> C++中未初始化函数范围(即,局部)整数的默认行为是它的,这很好;但是< /强>如果在定义之前使用该值,它会引入未定义的行为,任何事情都可能发生。

未初始化的变量会发生什么情况?C++; intmain() { INTA; CUT< P> C++中未初始化函数范围(即,局部)整数的默认行为是它的,这很好;但是< /强>如果在定义之前使用该值,它会引入未定义的行为,任何事情都可能发生。,c++,variables,initialization,C++,Variables,Initialization,上的此页提供默认整数行为的示例 另一方面,所有非局部、线程局部变量,而不仅仅是整数,都是。但您的原始示例中没有包含这种情况 (旁注:通常认为简单地初始化变量并完全避免潜在的危险是一种良好的做法,尤其是在以下情况下。) 在极少数特殊情况下使用全局变量的最佳实践也有例外,例如一些嵌入式系统;它们在启动时或在其初始循环迭代期间根据传感器读数初始化值……并且需要在其循环范围结束后保留一个值。我想您对答案/注释不太满意给定,可能您可以尝试以下代码: int main() { int a;

上的此页提供默认整数行为的示例

另一方面,所有非局部、线程局部变量,而不仅仅是整数,都是。但您的原始示例中没有包含这种情况

(旁注:通常认为简单地初始化变量并完全避免潜在的危险是一种良好的做法,尤其是在以下情况下。)


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

我想您对答案/注释不太满意给定,可能您可以尝试以下代码:

int main()
{    
    int a;
    cout << a;
    return 0;
}
#包括
使用名称空间std;
int main(){
int a,b,c,d,e,f,g,h,i,j;

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

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


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

0
与任何其他值一样是一个垃圾值。您有未定义的行为。这意味着无法保证您的程序将执行什么操作。@paddy well每次从无数可能的值中获得0就像赢得了powerball每次玩的时候,你不觉得有点可疑吗?:)@zar:不太可能。有些数字在计算机内存中比其他数字更常见,而0是最常见的。我认为这是一个调试负载,玩愚蠢的bug,以帮助的名义隐藏潜在的错误。不要认为未定义的行为意味着结果是随机的这是否意味着当输出0时,这仍然是一个未定义的行为。默认值是什么?您何时看到它们?是的,作为输出的0仍然是未定义的行为,即使它是所需的行为。并且没有默认值。在您的帮助下(ty)在阅读了更多的内容之后,我得出结论,在未初始化时,只有全局变量被设置为默认值,而在未初始化时,局部变量将包含任意值。这听起来对吗?@ec043这听起来不太正确,但在所有非局部(即“全局”)上都是关闭的,线程局部变量确实发生了。@ec043感谢您接受我的回答,希望这对您有所帮助!这很有帮助。有趣的是,我尝试了所有布尔值,它们都是0。这是否意味着某些数据类型有默认值?我意识到0是假的,integer有更多可能的值,但不要假设未定义的行为意味着结果是随机的。依赖于未定义行为的程序可以产生一致的结果。事实上,这个答案是误导性的,因为它意味着运行程序将为未初始化的变量输出不同的值。可能是。可能不是。具体来说,未初始化的bool、cha会发生什么r、 int和double?对于布尔问题,您可能需要尝试比我们尝试的整数更多的方法。通常,1整数是4字节,1布尔是1字节,如果它与相同的内存位置相关,那么一个0整数值与四个0布尔值相关。变量的不确定值不能保证等于值t事实上,在大多数情况下,使用不确定值会导致未定义的行为。
#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;
}