如何解决C++ 中的 Floor() 函数改变变量
我正在使用教程点的codingground 编译器上的 floor() 函数测试脚本。 我从这个简单的脚本开始:
#include <iostream>
#include <cmath>
using namespace std;
/* Including std namespace since I am not including any other namespaces. */
int main() {
double var1 = 3.393,var2;
cout << var1 << “ “ << var2;
return 0;
}
结果:3.393 0。
但是,当我将 floor()
添加到 var1 时,var2 更改为 6.95329e-310。
这是否有原因,要么是编译器特有的,要么是我做错了什么?
资源:http://tpcg.io/SkgxtNCa
解决方法
var2
未初始化,它是一个最终在堆栈上的局部变量。
当您调用函数时,堆栈用于保存返回地址以及该函数的局部变量。当你不初始化一个变量时,它会得到那个地方的堆栈中剩下的最后一个值。有些编译器的行为可能有所不同,有些编译器具有用于初始化的标志。我猜你使用的那个不会这样做,你最终会从堆栈中得到一个随机结果,调用 floor 可能改变了这一点。
只需更改代码以初始化变量
double var1 = 3.393,var2 = 0.0;
下面的评论指出它并不总是在堆栈上,这也是正确的。大多数实现使用堆栈,但根据平台/编译器的不同,它可能有很多东西。最重要的是在非托管语言中初始化变量,如 c、c++、pascal、汇编(这些是我多年来一直使用的那些),因为除非你将它们配置为这样做,否则它们不会为你做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。