使用十六进制内存地址获取变量的值

时间:2014-03-20 12:24:16

标签: c++ c pointers

我只想使用十六进制地址获取值:

#include<stdio.h>

int main()
{
   int *hold, value=10;
   hold = &value;
   printf("%p",hold);
}

它为我提供了地址0x7fffd7c24334。我只是想知道,如果在C或C ++中有一种方法,那么我可以直接得到&#34; value&#34;暂时使用十六进制数0x7fffd7c24334。我想变量hold的地址有时是相同的,因此0x7fffd7c24334仍然指向value,但我不确定。

3 个答案:

答案 0 :(得分:4)

假设每次执行程序时此地址都是一致的,您可以使用:

int value2 = *(int*)0x7fffd7c24334;

但请注意,这种假设通常是错误的!

函数中局部变量的地址取决于调用函数时执行点的堆栈状态(SP寄存器的值)。

它可能在main中起作用,因为此函数只被调用一次,并且SP寄存器在每次执行程序时都应具有相同的值。但即使它确实有效,只要在value之前添加变量,该地址就会发生变化。用简单的话来说,不要使用这种方法。

答案 1 :(得分:0)

printf("%d",*hold);

取消引用并使用%d

您不能依赖十六进制地址。

见这里:http://ideone.com/RdY4Ni

答案 2 :(得分:0)

我认为您可以使用此

printf("%x", hold);