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