c++ - 在方法中分配指针退出方法?
问题描述
我正在尝试学习 C++ 中的面向对象编程,但不明白为什么以下代码不会打印 hi:
#include <iostream>
class test {
double *x;
double y = 5;
public:
void printhi() {
*x = y;
std::cout << "hi";
}
};
int main() {
test a;
a.printhi();
return 1;
}
这段代码没有给我任何输出。如果我只是删除指针分配,则std::out<<"hi";
运行良好。为什么?在那里分配指针对计算机意味着什么?
解决方案
该成员x
没有初始化程序。因此,如果类被默认初始化,它将被默认初始化。默认初始化指针具有不确定的值。
尝试通过不确定的指针分配不存在的对象,甚至读取该不确定的值具有未定义的行为。
在那里分配指针对计算机意味着什么?
您尚未分配指针。您已经通过指针间接,并分配了指向的对象。除了没有对象被指向,因为指针有一个不确定的值。程序的行为是未定义的。
如果我只是删除指针分配, std::out<<"hi"; 运行良好。为什么?
如果您删除未定义的行为,那么该程序的行为将是您所期望的。
我认为 *x=y 和 x=&y 是相同的分配
一点也不。首先通过指针赋值x
并修改指向的对象,使其具有与 object 相同的值y
。第二个修改指针x
以指向对象y
。
*x=y
不是 的分配x
。它是 指向的对象的赋值x
。
然而 x 有一个无法赋值的不确定值
可以分配一个不确定的值。一旦分配,该值将不再是不确定的。这就是为什么x=&y
会有明确定义的行为。它分配指针。
也就是说,分配一个对象指针成员指向另一个成员的有用性是值得怀疑的。
推荐阅读
- python - 处理从子流程返回的 JSON
- python - 如何在 np.array 的特定范围内找到最大值的索引?
- python - 为什么我需要为指标提供(非)特权属性值?
- python - 如何填充python中canny检测到的边缘?
- docker - 无法从 WSL2 docker 容器连接到 WSL2 localhost 服务器
- r - 我需要一个函数来创建一个新变量,比如 Y_(i,t),方法是在面板数据集中贬低 X_(i,t) 变量,其中时间 T = 18 和国家/地区 n = 48
- android - 如何从 Android 应用风格中排除动态功能?
- neo4j - Neo4j 导入的标准输出中的“-”表示什么?
- python - 将 pytorch 数据加载器加载到 GPU 中
- flutter - 错误:使用生物特征验证时出错:PlatformException(no_fragment_activity,local_auth 插件要求活动是 FragmentActivity。,null,null)