输出没有给出垃圾价值

时间:2014-06-28 10:32:44

标签: c

晚上好, 这是一个如下所示的小程序。我在每次执行中寻找b的垃圾值,但得到相同的答案。 代码很简单如下:

#include<stdio.h>
#include<conio.h>

int main(void)
{
    int a = 300, b,c;
    if (a>=400)
    b=300;
    c=200;
    printf("\n%d\n%d",b,c);
    getch();
 }

Codeblocks中的o / p如下

2
200

但如果我删除该行

b=300;

保留分号,然后它会给出垃圾值。

为什么会出现这种矛盾?

3 个答案:

答案 0 :(得分:0)

这里2只是垃圾,你应该在&#39; if-statement&#39;之前打印b的值。并查看它是否与上一个print语句匹配。如果匹配则两者都是垃圾值,并且由于&#39; if-statement&#39;而没有发生任何变化。

关于编译器如何生成垃圾值的问题是不可预测的/随机的。

答案 1 :(得分:0)

阅读未初始化的变量遵循以下规则,

默认情况下,静态变量初始化为零表示本地静态或文件范围变量(全局变量)。

功能本地的非静态变量是不确定的。在分配值之前读取它们会导致未定义的行为。编译器可以自由地做任何事情。它可以是零,它可以是那里的值,它可以使程序崩溃。你完全没有保证。

它将简单地为您提供存储在堆栈中该位置的最后一个值(如果变量恰好存储在寄存器中,则在该寄存器中)。

未定义在不同编译器之间也可能有所不同。

答案 2 :(得分:0)

<强>解释

第1步: int a = 300, b, c;此处变量a已初始化为'300',变量bc已声明,但未初始化。

第2步: if(a >= 400)表示if(300 >= 400)。因此这种情况将会失败。

第3步: c = 200;此处变量c已初始化为'200'

第4步: printf("%d, %d, %d\n", a, b, c);它会打印"300, garbage value, 200"。因为变量b未初始化。