首页 > 解决方案 > C++ 中的 Floor() 函数更改变量

问题描述

我正在使用 tutorialspoint 的 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

标签: c++cmath

解决方案


var2未初始化,它是一个最终在堆栈上的局部变量。

当您调用函数时,堆栈用于保存返回地址以及该函数的局部变量。当您不初始化变量时,它会获取该位置上堆栈中剩余的最后一个值。有些编译器的行为可能不同,有些编译器有初始化标志。我猜你使用的那个没有这样做,你最终会得到堆栈上的随机结果,调用 floor 可能会改变这一点。

只需更改代码以初始化变量

double var1 = 3.393, var2 = 0.0;

下面的评论指出它并不总是在堆栈上,这也是正确的。大多数实现都使用堆栈,但取决于平台/编译器,它可能有很多东西。最重要的是用非托管语言初始化变量,例如 c、c++、pascal、汇编(这些是我多年来一直使用的语言),因为除非您将它们配置为这样做,否则它们不会为您执行此操作。


推荐阅读