有关参考和指向它们的问题

时间:2012-12-30 04:08:07

标签: c++ reference

  

可能重复:
  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);

你看到我想要做什么吗?

1 个答案:

答案 0 :(得分:2)

  

让我们说可以写一些这样的东西,例如:

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

更改内存的值?

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

*((int *) hex) = 5;

将“hex”转换为指针指向int,然后取消引用该指针并将int设置为5 - 当然,提供的是hex中的值实际上是指您可以写入的某些内存位置。但不用说,你不应该在任何你打算使用的程序中执行此操作。

  

如果我有一个程序(我不知道一个),它向我展示了我的游戏使用的所有内存位置。如果我改变了程序中的值,然后回到我的游戏或者什么,那么它会改变吗? (如果游戏正在运行)。

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