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

Nat*_*lor 3 c++ memory pointers

我是C++的新手,所以如果我遗漏了一些非常明显的东西,我会道歉.我正在阅读关于C++的教程,该教程讨论指针等.

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

    andy = 25;
    ted = &andy;
    beth = *ted;
Run Code Online (Sandbox Code Playgroud)

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

    andy = 25;
    beth = *(&andy);
Run Code Online (Sandbox Code Playgroud)

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

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

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

    andy = 25;
    beth = *(0x28ff18);
Run Code Online (Sandbox Code Playgroud)

我这样做是假设beth将保持值25,这是在内存位置0x28ff18中延迟的最后一个值.

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

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

如果我不能清楚地解释事情,我会道歉,但我想知道是否有办法可以完成我想要做的事情.

das*_*ght 5

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

事物的名称是编译时的工件.一旦编译完成,不要紧的变量是否已被调用andy,dummyx100019092304928304928341.

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

在它前面添加更多变量.这不能保证工作,因为系统可以将变量放在任何逻辑地址,但它有可能使变量移动.

但是,当我尝试运行此代码时出错([derefefencing a fixed address]).

你需要0x28ff18强制转换为指针,如下所示:((int*)0x28ff18).这将编译,但它可能无法正常工作.通常,硬编码固定地址是危险的,除非您通过位于固定地址的寄存器访问内存映射硬件.


1除了调试.即便如此,你最关心的是该变量的名称.