2015-02-05 55 views
-1

我想存储在一个双指针的内存地址和cout在该内存地址的值,但得到错误。存储双指针地址和检索其值

下面

是代码我试图编译:

struct doubleValue{ 
    double a; 
}; 

int main(){ 
    doubleValue *DBL = new doubleValue; 
    DBL->a=15; 
    // now I want to store the address of DBL->a in a double pointer and print out the value of double pointer. 
    double &doubelPtr = &DBL->a; 
    cout<< *doubelPtr; // this value should be 15 
} 

如果我运行上面的代码,然后我得到一个编译器错误“错误:从类型的非const引用‘双&’无效初始化型的 '双*' 右值 双& doubelPtr = & DBL-> A; ^”

有人可以帮我解决这个代码?谢谢!

+1

了解'参考运算符'('&')和'运算符地址(也是'&')之间的区别。它们不是一回事,但是你在你的示例程序中都使用了它们。 – PaulMcKenzie 2015-02-05 20:31:41

+0

使用指针停止(!) - 只是使用实例(这里是一个简单的双倍) – 2015-02-05 20:32:58

回答

0

双& doubelPtr应该是双* doubelPtr

0

这是参照相对于指针的情况下;

double &doublePtr 

是一个引用,而不是一个地址;尝试用

double *doublePtr 
2

您错误地使用这里的reference运营商这样做:

double &doubelPtr = &DBL->a; 

你应该只声明指针和地址分配给它。

double *doubelPtr = &DBL->a; 

以上使用的是address-of运算符。我知道这两个运营商(参考和地址)使用相同的符号&令人困惑,但事实就是如此。

但是,我很好奇你为什么需要这样做?是否因为你正在调用一个需要指向double的函数?如果是这样,就没有必要做一个迂回的方式来声明一个指向double的指针并赋值给它。只需将double的地址传递给函数即可。

+0

我想通了。正确的代码是: double &doublePtr = DBL->a; cout<<*doublePtr; 2015-02-05 22:04:09