【发布时间】:2022-01-25 17:55:48
【问题描述】:
我有一个问题 例如我有下面的代码:
void function1()
{
Car car;
car.color = 10;
carPtr = &car;
std::cout << carPtr->color;
}
void function2()
{
std::cout << carPtr->color;
}
int main()
{
function1();
function2();
}
出于某种奇怪的原因,此代码有效。 如果我在 function1() 范围内创建了一个 car 实例,那么为什么我可以在 function2() 中使用 car ??? 不应该让 carPtr 在它离开 function1() 的那一刻指向 nullptr,因为 car 存在于 function1() 的范围内 是否将“汽车”对象的数据复制到 function2() 中,这将如何工作???有人可以解释发生了什么吗?提前致谢!
【问题讨论】:
-
发布的代码不可能工作。没有包含文件可以将
std::cout带到聚会中,也没有任何carPtr或Car的声明。这段代码不能编译更少的工作。假设carPtr是一些全局的Car *你正在调用未定义的行为,这意味着代码被破坏了原始的。未定义的行为意味着它可能看起来有效,也可能无效,它可能真的做anything,包括nothing。该程序格式不正确。您将 observed 行为与 defined 行为混淆了。后者导致前者,前者不是后者的保证。