c-操作/引入int和double时出现意外输出



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

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

根据我的经验,3277032773之间的数字在上输出

  • 多个(但不是全部(在线gcc编译器站点
  • 我使用的远程linux服务器(gcc 5.4.0(
  • 我自己的linux机器(gcc 9.4.0(

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

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

在此代码中:

int total;
total += 6;

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

如果你关心变量定义时total的值是多少,那么就这样更改它:

int total = 0;
total += 6;

然后,不管怎样,总数都保证是6。如果你不初始化它,那么你就是在告诉编译器你不在乎值是多少

最新更新