gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:43:51 31 4
gpt4 key购买 nike

我是 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);工作。

如果我没有足够清楚地解释事情,我深表歉意,但我想知道是否有一种方法可以完成我想做的事情。

最佳答案

Even when I change the name of the variable the memory location (which is what I assume this is) doesn't change.

事物的名称是编译时的产物。编译器完成后,变量是否被称为 andydummyx100019092304928304928341.

What can I change in the code I have to change the memory location that andy is at?

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

However, I got an error when I tried to run this code ([derefefencing a fixed address]).

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


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

关于C++ 如何在内存中指定一个位置来获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14391733/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com