我是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(
奇怪的是,当删除最后一行(avg = 1.0
(时,此代码将正确输出6
,以及在某些运行gcc版本的机器上,该版本会在其他地方产生意外输出。
当然,备用线路int total = 0
和total = 6
解决了这个问题,但我想知道这里具体发生了什么。
在此代码中:
int total;
total += 6;
如果不初始化变量,编译器可以自由地将它们初始化为任何值,或者根本不初始化它们。你可能得到零,你可能得到一个随机值,或者你可能得到最初用于其他事情的内存,并且正在被重用。
如果你关心变量定义时total的值是多少,那么就这样更改它:
int total = 0;
total += 6;
然后,不管怎样,总数都保证是6。如果你不初始化它,那么你就是在告诉编译器你不在乎值是多少