#include <iostream>
int main()
{
int a;
int *p = &a;
std::cout << *p << "\n";
}
在此程序中,当我离开a
未初始化并尝试获取输出时
指针,它给了我-2
。但是当我使用值初始化a
时,打印*p
会给我这个值。当我-2
未初始化时,为什么会给a
?
答案 0 :(得分:6)
因为使用未初始化的变量,无论是直接还是间接(通过指针或引用),都是undefined behavior[1][2][3]。
[1] 这基本上意味着那些未初始化的变量将具有不确定的值。
[2] 我确定你永远不会在代码中的任何地方都喜欢undefined behavior。 子>
[3] 黄金法则:谨防undefined behavior。 子>
答案 1 :(得分:1)
a 。当它被分配时,它包含偶然的东西。与全局不同, C 中的局部变量不会隐式初始化为0(或其他任何东西)。
如果你多次运行程序,可能会给出不同的值(或不是)。
答案 2 :(得分:0)
在c ++中分配指向未定义值的指针是非法的。 a
未初始化。当您取消引用它时,它只指向垃圾值。