如何从C中的内存地址获取值?

时间:2017-03-15 07:49:25

标签: c memory-management

有点愚蠢的问题,但在这里 - 如何根据地址获得价值?

通常要获取某个值的地址,我只需将其打印出来:

printf("%p", &loc);

但是现在我需要根据其在内存中的地址来获取值。我该怎么做?

4 个答案:

答案 0 :(得分:3)

addressof运算符返回一个指针类型的对象。指针的值是指向对象的内存地址(loc)。您可以通过使用解引用运算符取消引用指针来获取指向的内存地址处对象的值:

*(&loc)

答案 1 :(得分:3)

访问特定地址0x12345678(例如硬件寄存器)的标准方法是:

(volatile uint32_t*)0x12345678

如果你想使用该地址的内容就好像它是一个变量,你可以在那里有一个指针点,或者做一个宏:

#define REGISTER ( *(volatile uint32_t*)0x12345678 )

答案 2 :(得分:1)

地址没有类型,但假设您知道,您可以使用以下行:

printf("%d", *(int*)p);

您可以测试几种类型来检查其中的内容:

printf("%d", *(int*)p);
printf("%f", *(float*)p);
...

注意,地址必须属于当前进程,否则,内存保护会终止你的进程。

答案 3 :(得分:1)

您只需使用星号来获取指针所指向的变量的值。

type x = *loc

我使用的是因为我不知道loc的类型(它可能是int,double,float,......)