如何在内存中指定一个位置来获取数据
C++ How do you specify a location in memory to grab data from?
我对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);工作。
如果我解释得不够清楚,我很抱歉,但我想知道是否有一种方法可以完成我想做的事情。
即使我改变了变量的名称,内存位置(这是我假设的)也不会改变。
事物的名称是编译时工件。编译完成后,变量是否被命名为andy
、dummy
或x10001909230492830492834
都无关紧要。1
我可以在代码中改变什么,我必须改变andy所在的内存位置?
在前面添加更多的变量。这并不能保证有效,因为系统可以将变量放置在任何逻辑地址,但是它有足够的机会让变量移动。
然而,当我试图运行这段代码([取消对固定地址的保护])时,我得到了一个错误。
您需要将0x28ff18
转换为指针,如:((int*)0x28ff18)。这将编译,但它可能无法工作。一般来说,硬编码固定地址是危险的,除非你通过放置在固定地址的寄存器访问内存映射的硬件。
1除调试外。即使这样,你也最关心变量的名称
- 将所有 URL 组织在类中的一个位置
- C++将包含的库 (ref DLL) 从根目录更改为另一个位置
- C++11 中的随机数:有没有一种简单的方法可以将生成器种子放在代码的一个位置,然后在不同的函数中使用它?
- 强迫G 在一个位置寻找升压,忽略其他设置
- 将文件从一个位置移至窗口C 的另一个位置
- C++的最后一个位置是否有计算单元的标准功能
- 如何在下一次函数调用中使用 STL 映射擦除从最后一个位置
- 排序为最后一个位置的元素提供错误的输出
- 如何从不同部分读取二进制文件的var?(例如,2个字节,另一个位置有2个字节?)
- 一些奇怪的行为:将文件夹中的所有文件移动到另一个位置
- 如何将sql数据库文件从系统位置复制到另一个位置
- 将文件从 SDCARD 位置复制到 Android 中 c 语言的另一个位置
- 找到一个位置并返回一个迭代器不起作用
- 非循环访客模式.将接受函数移动到一个位置
- 仅在 Eclipse 中不识别在一个位置的 ofstream 声明
- 如何在命令窗口的一个位置编写变量并在同一位置更新其值
- 如何在 c++ 中打印字母和符号后保留在一个位置
- C++ 如何将内存中的文件流保存到另一个位置
- TinyXML在最后一个位置插入
- 在一个位置或更低的位置上计数集位的有效方法是什么?< / h1 >