3

我对 C++ 很陌生,所以如果我遗漏了一些非常明显的东西,我深表歉意。我正在阅读关于 C++ 的教程,其中讨论了指针等。

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

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

我注意到 beth 真的和 &andy 一样。所以我将代码修改为:

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

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

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

但是,我的主要问题如下:我试图用 &andy 替换代码中的内存位置,方法是将其更改为。

    andy = 25;
    beth = *(0x28ff18);

我这样做是假设 beth 将保持 25 的值,这是在内存位置 0x28ff18 中挥之不去的最后一个值。

但是,当我尝试运行此代码时出现错误。

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

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

4

1 回答 1

5

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

事物的名称是编译时工件。编译器完成后,变量是否被调用andydummyx100019092304928304928341都没有关系。

我可以在代码中更改什么来更改 andy 所在的内存位置?

在它前面添加更多变量。这不能保证有效,因为系统可以将您的变量放在任何逻辑地址,但它有很大的机会使您的变量移动。

但是,当我尝试运行此代码时出现错误([取消引用固定地址])。

您需要转换0x28ff18为指针,如下所示:((int*)0x28ff18)。这将编译,但它可能不起作用。通常,硬编码固定地址是危险的,除非您通过放置在固定地址的寄存器访问内存映射硬件。


1调试除外。即便如此,您最关心该变量的名称。

于 2013-01-18T02:18:00.907 回答