C语言是否仅为void指针指定任何隐式初始化?

Kor*_*gay -5 c initialization void-pointers

这是我的代码:

int main()
{
    int *p;
    void *x;
    printf("%p\n", p);
    printf("%p\n", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将打印:

koraytugay $ ./a.out
0x7fff53b35ad0
0x0
koraytugay $ ./a.out
0x7fff5803fad0
0x0
koraytugay $ ./a.out
0x7fff512c9ad0
0x0
koraytugay $ ./a.out
0x7fff55213ad0
0x0
koraytugay $ ./a.out
0x7fff52dbdad0
0x0

这种行为在语言中有什么解释吗?

R S*_*ahu 6

您询问:

在C中,为什么void指针通过声明为NULL但其他类型包含垃圾?

这是一个使用小程序的错误结论.函数范围中未初始化的指针获取随机值.您不能依赖其值中的任何模式.

  • @KorayTugay您正在寻找一棵树,并得出结论,所有国家的所有森林中的所有树木都是相同的. (3认同)

Sou*_*osh 6

我认为,C11这方面的标准非常明确.参见第6.7.9章第10段,

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

现在,一个不确定的值是不确定的(你在这里指的是垃圾和/或NULL).你真的不知道会有什么.


编辑:

只是为了澄清,根据评论,

"但void *p总是似乎是NULL"

对.它看起来.就C标准而言,它没有任何保证(指定).

刚一说明:不想int main(void)int main().前者是推荐的.

  • 不确定意味着,你*不能依赖它*,而不是随机的.这取决于编译器. (2认同)