未初始化变量的价值是多少?

Raj*_*mar 3 c initialization garbage

可能重复:
是否已明确指定未初始化的数据行为?

我尝试了以下代码

#include<stdio.h>
void main()
{
int i; \
printf('%d',i);
}
Run Code Online (Sandbox Code Playgroud)

结果给出了VC++中的垃圾值,而tc中的垃圾值为零.什么是正确的价值?默认情况下,未初始化的变量的值是否为零?或者它会包含垃圾值?

接下来是一样的

#include<stdio.h> 
void main()
{
int i,j,num;
j=(num>0?0:num*num);
printf("\n%d",j);
}
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是什么?

Alo*_*ave 9

从技术上讲,未初始化的非静态局部变量的值是Indeterminate [Ref 1].
简而言之,它可以是任何东西.访问这样一个未初始化的变量会导致未定义的行为.[参考2]

[参考1]
C99部分6.7.8初始化:

如果未显式初始化具有自动存储持续时间的对象,则其值不确定.

[参考2]

C99第3.18节未定义的行为:

在使用不可移植或错误的程序构造时,对于本国际标准没有要求的错误数据或不确定值的对象的行为.

注意:强调我的.

  • 你为什么回答这么明显的骗局?我觉得你好多了 (3认同)