c双重初始化-默认值?

新手上路,请多包涵

我正在调试一些 C++ 代码,并且遇到了一个似乎从未被赋予值的 double。它是用该行声明的

double x;

以前没有使用过 C 或 C++,我不确定双精度值是否具有默认值?即根据上面的声明,如果 x 从未被明确指定一个值,它会自动为 0,还是 null

x 用于代码中其他地方的计算,计算结果旨在显示给用户 - 目前它不是……计算是:

 y * asin(sin(x / y) * sin(a * b));

我假设如果 x 默认为 0,这会导致编译/运行时错误吗?如果 x 默认为0,那么计算肯定会返回0,并且0会显示给用户吗?

原文由 Noble-Surfer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 444
2 个回答

如果您未指定初始化值,则 double x 的值如果位于堆/堆栈上则未定义。如果它是一个全局变量,它将被设置为 0。

原文由 Sean 发布,翻译遵循 CC BY-SA 3.0 许可协议

这取决于声明变量的 _位置_。

如果它被声明为全局变量,那么它将在 main 开始运行之前被初始化为零。

如果它在函数内被声明为非静态局部变量,那么它的值是不确定的(实际上它将是变量占用的内存中的任何内容,它看起来是随机的)。

使用未初始化(非静态)的局部变量会导致 未定义的行为

如果声明为 static 局部变量,那么在第一次调用该函数时它也将被初始化为零。

原文由 Some programmer dude 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏