【问题标题】:How does 0 get assigned to the variable 'a'? [duplicate]0如何分配给变量'a'? [复制]
【发布时间】:2016-04-26 16:27:17
【问题描述】:

我用 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

【问题讨论】:

    标签: c pointers


    【解决方案1】:

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

    你没有初始化a,所以当你尝试打印它的值时会发生什么是完全不可预测的。

    【讨论】:

      【解决方案2】:

      未初始化变量的值是不确定的。从未初始化的变量中读取的是undefined behaviour。所以任何事情都可能发生。 0 也是一个可能的结果。

      C11 standard says:

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

      indeterminate value 定义为:

      未指定的值或陷阱表示

      【讨论】:

        猜你喜欢
        • 2011-08-19
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 1970-01-01
        • 2017-01-09
        • 2013-03-11
        • 2012-12-30
        • 2021-06-14
        相关资源
        最近更新 更多