c++ - 在 *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
to的地址p
。
这个:
int *p;
*p=x;
做一些完全不同的事情。它取消引用p
并将值赋给x
结果。p
未初始化。它不指向int
. 因此,取消引用p
并尝试评估 的值会x
导致未定义的行为。
您将指针的值( an 的内存地址int
)与其指向的 (an int
) 混淆了。
推荐阅读
- sql - 超链接表达式的多个字段
- spring - 在 nginx 后面运行 spring boot 应用程序 - 重定向时缺少位置前缀
- optimization - 多路径旅行商优化
- java - 从 5.2 升级到 Hibernate 5.3 后,Ear 部署因空模块而失败,我使用的是 wweblogic 12c 12.1.3
- java - 为什么我的列表在我更改创建它的数组时被修改
- javascript - 暗模式复选框应保存在本地存储中
- java - DateTimeFormatter.parse(s) 在到达 s 末尾时抛出:为什么?
- arrays - excel vba运行时错误91对象变量未设置
- c++ - C++ 数组中的最大数。正面和负面的
- python - Teradataml (Teradata Python):Teradata Python 包是否提供任何示例数据集?