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)
它没有给出任何输出。这是为什么?
这个:
int *p;
p=&x;
Run Code Online (Sandbox Code Playgroud)
将 的地址分配x给p。
这个:
int *p;
*p=x;
Run Code Online (Sandbox Code Playgroud)
做一些完全不同的事情。它取消引用p并将值分配x给结果。p未初始化。它不指向int. 因此,取消引用p并尝试评估x结果的值会导致未定义的行为。
您将指针的值( an 的内存地址int)与其指向的内容( an int)混淆了。