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

int x=10;
int *p;
p=&x;
int **pp=&p;
cout<<**pp<<"n"<<*p<<"n"<<pp<<"n"<<&p<<"n";

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

int x=10;
int *p;
*p=x;
int **pp=&p;
cout<<**pp<<"n"<<*p<<"n"<<pp<<"n"<<&p<<"n";

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

回答

这个:

int *p;
p=&x;

将 的地址分配xp

这个:

int *p;
*p=x;

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

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


以上是在*ptr初始化后声明*ptr=x有什么问题?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>