首页 > 解决方案 > 操作/引入 int 和 double 时的意外输出

问题描述

我是 C 和 gcc 编译器的新手。在探索该语言时,我在运行以下代码时遇到了一些意外的输出:

int total;
total += 6;
printf("%d", total);
double avg;
avg = 1.0;

根据我的经验, 和 之间的数字32770输出32773在:

奇怪的是,6当最后一行 ( avg = 1.0) 被删除时,以及在某些运行 gcc 版本的机器上,该代码将正确输出,该版本在其他地方产生了意外的输出。

当然,替代线路int total = 0total = 6解决问题,但我想知道这里具体发生了什么。

标签: cgcccompiler-errors

解决方案


在这段代码中:

int total;
total += 6;

如果你不初始化变量,编译器可以自由地将它们初始化为任何东西,或者根本不初始化它们。你可能会得到零,你可能会得到一个随机值,或者你可能会得到最初用于其他用途的内存,并且正在被重用。

如果您关心定义变量时 total 的值是多少,请像这样更改它:

int total = 0;
total += 6;

然后,无论如何,总保证为 6。如果您不初始化它,那么您就是在告诉编译器您不在乎值是什么。


推荐阅读