为什么可以将整数值分配给未初始化的指针

Arv*_*ong 4 c++ pointers variable-assignment

当我这样做时,它完美地打印出“2”。

int main()
{
    int *p;
    int x = 2;

    *p = x;

    cout << *p;

}
Run Code Online (Sandbox Code Playgroud)

但是当我第一次将 *p 初始化为 null 时,程序崩溃了。

int main()
{
    int *p=0;
    int x = 2;

    *p = x;

     cout << *p;

}
Run Code Online (Sandbox Code Playgroud)

我想问一下,第一个程序到底成功运行了什么,为什么可以给一个未初始化的指针赋值?

[编辑] 我的问题实际上与我得到的这个过去的考试问题有关。您可以勾选多个答案,看来 (b) 和 (c) 都是正确的。但现在我知道 (c) 是否有效纯粹是因为运气。

在此处输入图片说明

R S*_*ahu 5

第一个程序受未定义行为的影响。它似乎有效,但不幸的是,看似理智的行为也是未定义的行为。

如果程序取消引用一个未初始化的指针,不要指望它一直正常工作。