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
这种行为在语言中有什么解释吗?
您询问:
在C中,为什么void指针通过声明为NULL但其他类型包含垃圾?
这是一个使用小程序的错误结论.函数范围中未初始化的指针获取随机值.您不能依赖其值中的任何模式.
我认为,C11这方面的标准非常明确.参见第6.7.9章第10段,
如果未显式初始化具有自动存储持续时间的对象,则其值不确定.
现在,一个不确定的值是不确定的(你在这里指的是垃圾和/或NULL).你真的不知道会有什么.
编辑:
只是为了澄清,根据评论,
"但
void *p总是似乎是NULL"
对.它看起来.就C标准而言,它没有任何保证(指定).
刚一说明:不想int main(void)了int main().前者是推荐的.