如何将0分配给变量'a'?

时间:2016-01-20 17:26:39

标签: c pointers

我在C中写了一个简单的程序(C中的新手)

当我尝试编译这个程序时,它会被编译。

创建指向int'p'的指针并存储变量'a'

的地址

当我退出指针时,它显示值0但我从未分配任何值

到我的变量那么0来自哪里? 如果我们写     int a; 它甚至在为其分配任何值之前就在内存中分配空间。

#include <stdio.h>

int main()
{
    int a;
    int *p = &a;
    printf("%d\n", *p);
    return 0;
}

编译器:clang

2 个答案:

答案 0 :(得分:5)

未初始化变量的值为 indeterminate 。从未初始化的变量读取是undefined behaviour。所以一切都会发生。 0也是可能的结果。

C11 standard says:

  

如果未初始化具有自动存储持续时间的对象   显然,它的价值是不确定的。

indeterminate value定义为:

  

未指定的值或陷阱表示

答案 1 :(得分:2)

它不是来自任何地方!这是一个任意值。

您没有初始化a,因此当您尝试打印其值时会发生什么情况是完全不可预测的。