4

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

int exampleInteger;

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

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

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

4

2 回答 2

4

是的,您可以使用references来做到这一点,如下所示:

int &a(*aPtr);

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

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

当然,为了使它工作,您需要确保该常量0x457FB确实代表一个可用于您的程序读写的有效地址。

于 2013-06-08T02:10:27.947 回答
1

正如dasblinkenlight所说,您可以使用引用来完成您想要的。我要为此添加一件事,因为我们使用的是 C++,所以您应该更喜欢reinterpret_cast而不是C style强制转换,因为您明确说明了您的意图,并且它们更容易找到并更加突出,这个先前的线程更详细地介绍了这一点。代码如下所示:

int* exampleIntegerPtr = reinterpret_cast<int*>(0x457FB);
int &exampleInteger = *exampleIntegerPtr;
于 2013-06-08T02:30:43.023 回答