【发布时间】:2021-10-31 06:55:33
【问题描述】:
我了解地址运算符& 存储变量的实际地址。指针存储对我可以使用解引用运算符* 访问的地址的引用。我不明白的是如何使指针指向给定地址。以下方法均无效。
void getDouble(double &addr) {
// Incorrect type cast error
std::cout << *((double *)addr) << std::endl;
// Incorrect type cast error
double *dbl = addr;
std::cout << (double *)addr << std::endl;
从 C/C++ 中的地址获取值的正确方法是什么?
【问题讨论】:
-
在
void getDouble(double &addr),你有一个引用,而不是一个指针。听起来你可以使用good C++ book -
我理解地址操作符 --
double& addr-- 那是不是地址操作符。看起来您一直在阅读C-only 书籍,其中该符号只能表示该语言中的“地址”。 -
在 C++ 中,相同的符号可以根据上下文有不同的含义。是的,
&运算符为您提供指向对象的指针,但double &addr是不同的上下文。在这种情况下,这意味着addr是对double的引用,并且与地址运算符无关。 -
我假设this 是你想要的?
void getDouble(double *addr)接受指向双精度的指针,在您的示例中,它期望引用双精度。 -
如果您只是假装 C 是 java,而 C++ 是 C#(或其他不相关的一对语言),从长远来看,它会对您有所帮助。有些代码可能看起来很相似,但实际上它们是不同的语言。这同样适用于 C 和 C++,随着它们的发展和分歧越来越大。