【问题标题】:Questions about reference and pointers to them [duplicate]关于引用和指向它们的问题[重复]
【发布时间】:2012-12-30 04:08:07
【问题描述】:

可能重复:
pointer to a specific fixed address

int a, hex = 0x573285;
int * pA; // Pointer?
*pa = &a; // &a = the hexadecimal-memory location and *pa is now going to point to that place.

所以我想:

假设可以这样写:

(*hex) = 5; or whatever the hexadecimal number is

改变内存的值?

如果我有一个程序(我不知道),它会显示我的游戏使用的所有内存位置。 如果我更改了程序中的值然后回到我的游戏或其他任何情况下,它也会在那里更改吗? (如果游戏正在运行)。

(*this) the same as (this*)

编辑: 这行得通

int a = 5, b=0x28ff1c;
int* c = &a;
cout << *(c);

但不是:

int a = 5;
int * b=0x28ff1c;
int * c = &a;
cout << *(b);

也不:

int a = 5, b=0x28ff1c;
int * c = &a;
cout << *(b);

你明白我在做什么吗?

【问题讨论】:

  • *this 取消引用 thisthis* 后面需要一些东西才能调用operator*,但它本身并不完整。
  • 幸运的是,现代操作系统阻止您读取/写入您不拥有的内存......
  • @K-ballo,直到你打电话给WriteProcessMemory(在 Windows 中);)
  • @MaggiQall 恐怕这个问题没有多大意义。 hex 是一个int,所以没有*hex 这样的东西。 C++ 教科书见stackoverflow.com/questions/388242/…
  • 当然,除非这不是在具有内存保护的 32/64 位现代架构上。我记得,任天堂允许从内存位置读取和写入(使用整数2指针转换)。

标签: c++ reference


【解决方案1】:

假设可以这样写:

(*hex) = 5; or whatever the hexadecimal number is

改变内存的值?

标准不一定保证这种能力,但在很多系统上你可以写:

*((int *) hex) = 5;

hex“转换”为指向int的指针,然后取消引用该指针并将int设置为5——当然,前提是hex中的值确实指的是您可以写入的一些内存位置。但不用说,你不应该在任何你真正打算使用做任何事情的程序中这样做。

如果我有一个程序(我不知道),它会显示我的游戏使用的所有内存位置。如果我更改了程序中的值然后回到我的游戏或其他任何情况下,它也会在那里更改吗? (如果游戏正在运行)。

在嵌入式系统上经常出现这种情况,但在具有正常操作系统的现代机器上通常不会出现这种情况,因为使用了virtual memoryvirtual address spaces。发生的情况是,一个进程通常不知道它正在使用的内存的真实 物理 内存位置(如果有的话);相反,存储在指针中的值是“虚拟的”,并且依赖于进程。两个进程的0x12345678 可以完全没有关系,被映射到完全不同的内存位置。

【讨论】:

  • 标准不一定能保证这种能力?一元运算符* 仅适用于指针类型。这就是标准所说的。
  • 嗯 *((int *) hex) 就像一个魅力:非常感谢。所以我并没有完全失去理智(我的意思是在我的“逻辑思维”中)^^,我认为这真的很有趣。再次感谢您。
  • @jogojapan:澄清一​​下:标准当然不保证语法;但它并不一定保证能力。正确的 syntax 是我在回答中给出的。 (但即使使用正确的语法,它仍然不能保证工作,因为标准不保证在int 和指向对象的指针之间来回转换是安全的。)你明白我的意思吗?
  • 好吧,我真的只是想知道如果这只是输入一个十六进制来查看某些东西所持有的值,或者如果你一定要这样做:*(&a) 或其他东西。以为当您尝试打印它时它只是将它转换为十六进制。像魔术功能什么的。我不确定你是否明白我的意思:) 但我虽然你的回答是我的问题。我赞成克里斯对另一个问题的回答。我不明白为什么我不接受你的回答。
  • (好吧,取消我之前的评论。问题已经关闭确实完全阻止其他人提供答案。:-P)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多