c - 操作/引入 int 和 double 时的意外输出
问题描述
我是 C 和 gcc 编译器的新手。在探索该语言时,我在运行以下代码时遇到了一些意外的输出:
int total;
total += 6;
printf("%d", total);
double avg;
avg = 1.0;
根据我的经验, 和 之间的数字32770
输出32773
在:
- 多个(但不是全部)在线 gcc 编译器站点
- 我使用的远程 linux 服务器(gcc 5.4.0)
- 我自己的linux机器(gcc 9.4.0)
奇怪的是,6
当最后一行 ( avg = 1.0
) 被删除时,以及在某些运行 gcc 版本的机器上,该代码将正确输出,该版本在其他地方产生了意外的输出。
当然,替代线路int total = 0
并total = 6
解决问题,但我想知道这里具体发生了什么。
解决方案
在这段代码中:
int total;
total += 6;
如果你不初始化变量,编译器可以自由地将它们初始化为任何东西,或者根本不初始化它们。你可能会得到零,你可能会得到一个随机值,或者你可能会得到最初用于其他用途的内存,并且正在被重用。
如果您关心定义变量时 total 的值是多少,请像这样更改它:
int total = 0;
total += 6;
然后,无论如何,总保证为 6。如果您不初始化它,那么您就是在告诉编译器您不在乎值是什么。
推荐阅读
- c++ - 创建 Firebase 实例时 Android NDK 崩溃
- javascript - 如何使用javascript滚动到div的中心
- c++ - Vulkan 推送常量从未分配或更新
- javascript - 未捕获的类型错误:回调不是函数.....在 FullCalendar 中设置事件
- c# - 创建新的 .NetCore MSTest 项目并得到一个错误,指出命名空间“Microsoft”中不存在“VisualStudio”
- c++ - 使用队列和堆栈c ++的后缀评估
- node.js - 优化MongoDB中的聚合
- java - 如何表示一个长于 long 的数字并打印出来
- java - 范围内的代理模式
- c - free pointer by other pointer points same memory