在 *ptr 初始化后声明 *ptr=x 有什么问题?

sno*_*doo 0 c++ pointers initialization reference declaration

int x=10;
int *p;
p=&x;
int **pp=&p;
cout<<**pp<<"\n"<<*p<<"\n"<<pp<<"\n"<<&p<<"\n";
Run Code Online (Sandbox Code Playgroud)

在上述情况下一切顺利,但是当我改变声明指针 p 的方式时:

int x=10;
int *p;
*p=x;
int **pp=&p;
cout<<**pp<<"\n"<<*p<<"\n"<<pp<<"\n"<<&p<<"\n";
Run Code Online (Sandbox Code Playgroud)

它没有给出任何输出。这是为什么?

for*_*818 5

这个:

int *p;
p=&x;
Run Code Online (Sandbox Code Playgroud)

将 的地址分配xp

这个:

int *p;
*p=x;
Run Code Online (Sandbox Code Playgroud)

做一些完全不同的事情。它取消引用p并将值分配x给结果。p未初始化。它不指向int. 因此,取消引用p并尝试评估x结果的值会导致未定义的行为

您将指针的值( an 的内存地址int)与其指向的内容( an int)混淆了。