0

可能重复:
指向特定固定地址的指针

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);

你明白我在做什么吗?

4

1 回答 1

2

假设可以写这样的东西,例如:

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

改变内存的值?

该标准不一定保证这种能力,但在许多系统上您可以编写:

*((int *) hex) = 5;

将“强制转换”hex为指向 - 的指针int,然后取消引用该指针并将其设置int5- 当然,前提是 in 的值hex实际上是指您可以写入的某个内存位置。但不用说,您不应该在您实际打算用于任何事情的任何程序中执行此操作

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

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

于 2012-12-30T04:19:01.870 回答