首页 > 解决方案 > 在 *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";

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

标签: c++pointersreferenceinitializationdeclaration

解决方案


这个:

int *p;
p=&x;

分配xto的地址p

这个:

int *p;
*p=x;

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

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


推荐阅读