如何访问已知内存地址的内容?

sti*_*ian 1 c memory

我知道可以通过&运算符找到变量或函数的内存地址.但是,如果我知道某些东西处于记忆位置2,我该如何访问它?

例如,如果我声明指向2,它将被读取为值2,而不是内存地址2.

Car*_*rum 5

你只需要把它作为一个指针:

int *pointerToTwo = (int *)2;
Run Code Online (Sandbox Code Playgroud)

然后你可以照常取消引用:

int valueAtTwo = *pointerAtTwo;
Run Code Online (Sandbox Code Playgroud)

你做这种事情的通常原因是访问内存映射寄存器,在这种情况下volatile建议使用关键字:

int valueAtTwo = *(volatile int *)2;
Run Code Online (Sandbox Code Playgroud)

或者也许将所有的转换都粘贴到宏中以使代码更易于阅读:

#define intValueAt(x)  (*(volatile int)(x))
int valueAtTwo = intValueAt(2);
Run Code Online (Sandbox Code Playgroud)

旁白: 2几乎肯定不是这个用例的有效地址.我刚刚使用它,因为你在问题中提到了它.

  • 请注意,这样做需要额外了解指针/内存地址的格式.在某些情况下,从0开始并从那里开始继续处理内存并不是一个简单的例子.此外,您可以尝试访问受读取或写入访问保护的内存.您可以尝试写入ROM.您可以清除内存映射的IO设备.话虽如此,在负责任地使用时它可能非常有用. (2认同)