当前位置: 首页 > 知识库问答 >
问题:

未初始化变量会发生什么?C[副本]

郭曾笑
2023-03-14
int main()
{    
    int a;
    cout << a;
    return 0;
}

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

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

谢谢

共有3个答案

杨晓博
2023-03-14

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

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

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

应俊爽
2023-03-14

我认为你不相信给出的答案/评论,也许你可以试试下面的代码:

#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;
}
薛涛
2023-03-14

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

本页提供了默认整数行为的示例。

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

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

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

 类似资料:
  • 为什么打印(或其他一些随机数)?什么是 printing?为什么它不是 (或 )?

  • 我在这里看到过类似的问题,如果这看起来像是重复的,我很抱歉,但是类似问题的答案对我没有帮助。所以我有一个方法,它是类的一部分。这里是: 错误表明变量min可能尚未初始化。我不明白这怎么可能是真的。我觉得变量不可能不在for循环之外初始化。请帮忙。谢谢

  • 我已经检查过自己,我写了一个这样的程序 我运行了几次程序,结果始终是一样的,零。我在C中尝试过,结果是一样的。 但我的教科书说 如果未初始化函数内定义的变量,则该变量值将保持未定义状态。这意味着该元素具有以前驻留在内存中该位置的任何值。 当程序始终将可用内存位置分配给变量时,这怎么可能?它怎么可能是零以外的东西(我假设默认的可用内存值为零)?

  • 本文向大家介绍tensorflow 初始化未初始化的变量实例,包括了tensorflow 初始化未初始化的变量实例的使用技巧和注意事项,需要的朋友参考一下 今日在Stack Overflow上看到一个问如何只初始化未初始化的变量,有人提供了一个函数,特地粘贴过来共大家品鉴: 通过tf.global_variables()返回一个全局变量的列表global_vars, 然后以python列表解析式的

  • 问题内容: TensorFlow中初始化变量的标准方法是 经过一段时间的学习后,我创建了一组新变量,但是一旦初始化它们,它将重置所有现有变量。目前,解决此问题的方法是保存所需的所有变量,然后在tf.initalize_all_variables调用之后重新应用它们。这有效,但是有点笨拙。我在文档中找不到像这样的东西… 有谁知道初始化未初始化变量的好方法吗? 问题答案: 没有优雅的方法可以枚举图中的