如何在内存中指定一个位置来获取数据

C++ How do you specify a location in memory to grab data from?

本文关键字:一个 位置 数据 获取 内存      更新时间:2023-10-16

我对c++非常陌生,所以如果我错过了一些非常明显的东西,我很抱歉。我正在读一本c++教程,里面讲了指针之类的东西。

在本教程中给出了以下示例:

    andy = 25;
    ted = &andy;
    beth = *ted;

我注意到beth和andy长得一模一样。所以我将代码修改为:

    andy = 25;
    beth = *(&andy);

当我打印出&andy时,它给出了andy所指的内存位置。每次执行代码时,我都会得到一个特定的内存位置:0x28ff18

即使我改变了变量的名称,内存位置(这是我假设的)也不会改变。根据本教程,内存位置是由操作系统自动分配的。我能在代码中改变什么,我必须改变安迪所在的内存位置?

然而,我的主要问题如下:我试图通过将代码中的内存位置更改为。

来替换&andy。
    andy = 25;
    beth = *(0x28ff18);

我这样做是假设beth将保留值25,这是内存位置0x28ff18中最后一个值。

然而,当我试图运行这段代码时,我得到了一个错误。

我还尝试将0x28ff18设置为字符串,字符和整数,并且在任何情况下beth = *(thatVariable);工作。

如果我解释得不够清楚,我很抱歉,但我想知道是否有一种方法可以完成我想做的事情。

即使我改变了变量的名称,内存位置(这是我假设的)也不会改变。

事物的名称是编译时工件。编译完成后,变量是否被命名为andydummyx10001909230492830492834都无关紧要。1

我可以在代码中改变什么,我必须改变andy所在的内存位置?

在前面添加更多的变量。这并不能保证有效,因为系统可以将变量放置在任何逻辑地址,但是它有足够的机会让变量移动。

然而,当我试图运行这段代码([取消对固定地址的保护])时,我得到了一个错误。

您需要将0x28ff18转换为指针,如:((int*)0x28ff18)。这将编译,但它可能无法工作。一般来说,硬编码固定地址是危险的,除非你通过放置在固定地址的寄存器访问内存映射的硬件。


1除调试外。即使这样,你也最关心变量的名称