是否可以将整数指针转换为位于该内存位置的实际整数?

时间:2013-06-08 02:08:41

标签: c++

通常,我们在C ++中声明这样的变量:

int exampleInteger;

如果我有一个指向整数地址的指针怎么办?我可以声明一个位于某个内存地址的整数吗?

int* exampleIntegerPtr = (int*) 0x457FB;
int exampleInteger = *exampleIntegerPtr;

不幸的是,第二个例子中的exampleInteger与第一个例子中的exampleInteger不同。第二个示例创建一个新变量,其值与exampleIntegerPtr中的整数值相同。是否有可能以某种方式获取位于exampleIntegerPtr的实际整数?

2 个答案:

答案 0 :(得分:4)

是的,您可以使用参考来完成,如下所示:

int &a(*aPtr);

此时,对int中存储的aPtr所做的任何更改都将反映在a中:

*aPtr = 123;
cout << a << endl; // 123 is printed
*aPtr = 456;
cout << a << endl; // 456 is printed

当然为了实现这一点,你需要确保常量0x457FB确实代表了你的程序可以读写的有效地址。

答案 1 :(得分:1)

正如dasblinkenlight所说,你可以使用引用来实现你想要的。我会为此添加一些内容,因为我们使用的是C ++,您应该更喜欢reinterpret_cast 而不是C style强制转换,因为您明确表达了自己的意图并且更容易找到并且更加突出,这个{{ 3}}更详细地介绍了这一点。代码如下:

int* exampleIntegerPtr = reinterpret_cast<int*>(0x457FB);
int &exampleInteger = *exampleIntegerPtr;