是否可以直接分配地址值给指针?



我从www.learncpp.com学习c++。教程很好,我可以通过评论来询问作者,但需要一些时间才能得到回复。所以,在第23.7课快结束的时候,我有点困惑。

关于向磁盘写入指针的警告

虽然将变量流式传输到文件中很容易,但当您处理指针时,事情变得更加复杂。记住,指针只是保存它所指向的变量的地址。虽然可以向磁盘读写地址,但这样做是非常危险的。这是因为变量的地址在每次执行中可能不同。因此,尽管当您将地址写入磁盘时,变量可能位于地址0x0012FF7C,但当您将该地址读回磁盘时,它可能不再位于该地址!

例如,假设您有一个名为nValue的整数,位于地址0x0012FF7C。你给nValue赋值5。您还声明了一个名为*pnValue的指针,它指向nValue。pnValue保存着nValue的地址0x0012FF7C。您希望保存这些内容以供以后使用,因此将值5和地址0x0012FF7C写入磁盘。

几周后,再次运行程序并从磁盘读取这些值。将值5读入另一个名为nValue的变量,该变量位于0x0012FF78。将地址0x0012FF7C读入名为*pnValue的新指针。因为当nValue在0x0012FF78时,pnValue现在指向0x0012FF7C, pnValue不再指向nValue,试图访问pnValue会给你带来麻烦。

它写得好像我们可以存储一个地址,比如0x0012ff78,并直接将其检索回指针。因为我到处都找不到答案,所以有了这个问题。

可以,在c++中它看起来像:

auto ptr = reinterpret_cast<ptr_type>(0x0012FF7C);

其中ptr_type是一个有效的指针类型,如int*


为课程中概述的问题添加一些更清晰的内容:

内存地址根据系统上运行的不同程序的需要不断被回收和重用。

当你的程序开始运行时,操作系统会跟踪你的程序被允许访问的内存地址。当你的程序结束时,这些内存地址将被操作系统回收,供其他可能需要它的进程使用。

如果您重新启动程序并试图修改或访问(取消引用)存储在特定地址的信息,而您的程序没有明确请求,操作系统将/应该检测到这一点,并可能决定结束程序。

最新更新