通常,我们在C ++中声明这样的变量:
int exampleInteger;
如果我有一个指向整数地址的指针怎么办?我可以声明一个位于某个内存地址的整数吗?
int* exampleIntegerPtr = (int*) 0x457FB;
int exampleInteger = *exampleIntegerPtr;
不幸的是,第二个例子中的exampleInteger与第一个例子中的exampleInteger不同。第二个示例创建一个新变量,其值与exampleIntegerPtr中的整数值相同。是否有可能以某种方式获取位于exampleIntegerPtr的实际整数?
答案 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;