C++ 关于引用的问题和指向它们的指针

C++ 关于引用的问题和指向它们的指针,c++,reference,C++,Reference,可能重复: 所以我想: 假设可以这样写,例如: (*hex) = 5; or whatever the hexadecimal number is (*hex) = 5; or whatever the hexadecimal number is 要更改内存的值 如果我有一个程序(我不知道),它会告诉我游戏使用的所有内存位置。 如果我改变了程序中的值,然后又回到我的游戏或者其他什么,它也会改变吗?(如果游戏正在运行) (*此)与(此*)相同吗 编辑: 这很有效 int a = 5, b=0

可能重复:

所以我想:

假设可以这样写,例如:

(*hex) = 5; or whatever the hexadecimal number is
(*hex) = 5; or whatever the hexadecimal number is
要更改内存的值

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

(*此)与(此*)
相同吗

编辑: 这很有效

int a = 5, b=0x28ff1c;
int* c = &a;
cout << *(c);
inta=5,b=0x28ff1c;
int*c=&a;
库特
假设可以这样写,例如:

(*hex) = 5; or whatever the hexadecimal number is
(*hex) = 5; or whatever the hexadecimal number is
要更改内存的值

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

*((int *) hex) = 5;
将“
hex
转换为指向-
int
的指针,然后取消对该指针的引用,将
int
设置为
5
——当然,前提是
hex
中的值确实指向可以写入的某个内存位置。但不用说,你不应该在任何你真正打算用于任何事情的程序中这样做

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


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

*此
解除引用
这个*
后面需要一些东西才能调用
操作符*
,但它本身并不完整。幸运的是,现代操作系统阻止你读取/写入你不拥有的内存…@K-ballo,直到你调用类似
WriteProcessMemory
(在Windows中);)@我担心这个问题没有多大意义
hex
是一个
int
,所以没有
*hex
这样的东西。对于C++教科书,当然,除非这是一个32/64位的现代架构,它具有内存保护功能。我记得,任天堂(Nintendo)允许从内存位置读取数据并向其写入数据(通过这样的整数2点转换)。标准不一定保证这种能力?一元运算符
*
仅适用于指针类型。这就是标准所说的。嗯*((int*)hex)工作起来很有魅力:非常感谢。所以我并不是完全疯了(我的意思是在我的“逻辑思维”)^^,我觉得这真的很有趣。再次感谢。@jogojapan:澄清一下:标准当然不能保证语法;但这并不一定能保证这种能力。正确的语法是我在回答中给出的。(但即使有正确的语法,它仍然不能保证工作,因为标准不能保证在
int
和指向对象的指针之间来回转换是安全的。)你明白我的意思吗?好的,我真的只是想知道,如果输入一个十六进制来查看某个东西有什么价值,或者你是否一定要这样做:*(&a)或其他什么。我想也许当你试着打印出来的时候,它只是把它转换成了一个十六进制。像一个神奇的函数之类的。虽然我不确定你是否明白我的意思:)但我认为你的回答正好符合我的问题。我对克里斯回答的另一个问题投了赞成票。我不明白为什么我不接受你的答案。(好吧,删掉我之前的评论。问题已经结束,这完全阻止了其他人提供答案。:-P)
*((int *) hex) = 5;