指针地址未初始化时指针的值

时间:2013-06-07 07:22:42

标签: c++ pointers

#include <iostream>

int main()
{
    int a;
    int *p = &a;
    std::cout << *p << "\n";
}

在此程序中,当我离开a未初始化并尝试获取输出时 指针,它给了我-2。但是当我使用值初始化a时,打印*p会给我这个值。当我-2未初始化时,为什么会给a

3 个答案:

答案 0 :(得分:6)

因为使用未初始化的变量,无论是直接还是间接(通过指针或引用),都是undefined behavior[1][2][3]


[1] 这基本上意味着那些未初始化的变量将具有不确定的值。
[2] 我确定你永远不会在代码中的任何地方都喜欢undefined behavior
[3] 黄金法则:谨防undefined behavior

答案 1 :(得分:1)

在堆栈上分配

a 。当它被分配时,它包含偶然的东西。与全局不同, C 中的局部变量不会隐式初始化为0(或其他任何东西)。

如果你多次运行程序,可能会给出不同的值(或不是)。

答案 2 :(得分:0)

在c ++中分配指向未定义值的指针是非法的。 a未初始化。当您取消引用它时,它只指向垃圾值。