c++ - 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
解决方案
var2
未初始化,它是一个最终在堆栈上的局部变量。
当您调用函数时,堆栈用于保存返回地址以及该函数的局部变量。当您不初始化变量时,它会获取该位置上堆栈中剩余的最后一个值。有些编译器的行为可能不同,有些编译器有初始化标志。我猜你使用的那个没有这样做,你最终会得到堆栈上的随机结果,调用 floor 可能会改变这一点。
只需更改代码以初始化变量
double var1 = 3.393, var2 = 0.0;
下面的评论指出它并不总是在堆栈上,这也是正确的。大多数实现都使用堆栈,但取决于平台/编译器,它可能有很多东西。最重要的是用非托管语言初始化变量,例如 c、c++、pascal、汇编(这些是我多年来一直使用的语言),因为除非您将它们配置为这样做,否则它们不会为您执行此操作。
推荐阅读
- google-cloud-platform - (谷歌云平台)我不小心在Linux VM里面设置了防火墙
- hierarchical-data - Azure SQL DB - 分层查询
- dataframe - Pyspark 中最多两列
- discord - TypeError:制作爆炸参数时无法读取未定义的属性“bulkDelete”
- node.js - 如何使用 React Error boundry get error details 尽可能多地获取有关错误的详细信息?
- android - 房间自动迁移不起作用:新表(实体)的致命异常
- docker - 如何在同一个 docker 容器中运行 nginx 和 gunicorn
- pandas - 在熊猫 1.3 中升级多索引数据帧
- excel - VBA编码,查找和匹配功能
- javascript - 如何在 javascript 中删除元素?