【发布时间】:2015-08-25 06:27:43
【问题描述】:
这是我的代码:
int main()
{
int *p;
void *x;
printf("%p\n", p);
printf("%p\n", x);
return 0;
}
将打印:
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
语言中对此行为有什么解释吗?
【问题讨论】:
-
p和x是未初始化的变量,标准规定使用未初始化的变量会导致未定义的行为。代码打印出未初始化的变量没有任何意义 -
不。没有定义的解释。您的代码调用未定义的行为。您在 both 情况下评估 indeterminate 变量。
-
是未定义的行为。你有什么问题?
-
@WhozCraig 你确定不确定的值会导致 C 中的 UB(而不是 C++)吗?
-
我不认为它会调用未定义的行为,只是这些值在标准中是不确定的。然而,这些实现可能只是扩展了标准并且仍然符合标准。未初始化的局部变量,例如,在 MacOS 中总是归零(据我所知,出于安全原因),并且可能会欺骗您认为这只是一个普遍的事实。它不是。只有在 MacOS 中才会如此。
标签: c initialization void-pointers