如果变量尚未初始化,为什么它将输出显示为零而不是垃圾值?

时间:2018-01-12 17:25:30

标签: c

这是一个用C语言编写的程序,只显示尚未初始化的变量

#include <stdio.h>

int main()
{
int a, b;
printf("%d%d",a,b);

return 0;
}

输出: 00

我已经开始在20分钟前开始学习c编程,这是我生命中的第一次,你能告诉我为什么它将输出显示为00,因为我们应该在大多数情况下将变量初始化为0避免在他们的地方看到垃圾价值的情况所以我只是想知道它为什么会发生?为什么我们没有得到垃圾值而不是普通的'0',它有自己的ASCII值?

3 个答案:

答案 0 :(得分:2)

int x = 0;
printf("%d", x); // -> 0

将x的值显示为内存中的整数。但是,未初始化的变量不能被信任,每次都具有零值。见What happens to a declared, uninitialized variable in C? Does it have a value?

如果您想要该整数的字符表示,请使用

int x = 99;
printf("%c", x); // -> c

代替。它将给出ASCII表示。 int x = 99;表示'c')

答案 1 :(得分:1)

未分配的变量并不意味着它没有值,只是意味着未定义该值(或者如果您愿意,则知道该值)。但要小心,读取一个从未初始化的变量是未定义的行为。

答案 2 :(得分:0)

默认情况下,C不会为未初始化的变量赋值,您必须告诉它在每个变量中存储的内容。如果您尝试使用这些变量而不给它们赋值,则输出将是不可预测的。

例如,当我在我的电脑上运行它时,我去了值:41944324050944

不要这样做。如果你这样做,你的程序将在以后运行时抛出意想不到的结果。请参阅this

执行此操作的正确方法是定义ab,如下所示:

int a = 0;
int b = 0;

在定义static存储空间的情况下,默认值为0(始终)see this web page for more information

此程序将按预期返回00:

#include <stdio.h>

int main()
{
    static int a, b;
    printf("%d%d",a,b);

    return 0;
}

即使ab未分配值,也使用static存储,因此值为0

此外,如果您希望打印ASCII字符,请使用%c代替%d。见here。另请注意,ASCII中的00null see here for printing null variables