2012-11-30 42 views
0

可能重複:
Difference between pointer to a reference and reference to a pointerC++詭計與*是什麼意思?

我是新手C++和我在一個相當複雜的項目。當我試圖找出一些東西,我看到了一個有趣的事情:

n->insertmeSort((Node *&)first); 

當我們深入到insertmeSort,我們同樣可以看到:

void Node::insertme(Node *&to) 
{ 
    if(!to) { 
     to=this; 
     return; 
    } 
    insertme(value>to->value ? to->right : to->left); 
} 

所以我的問題的原因是:Node *& - 星號和&符號,爲了什麼?

它看起來很棘手,對我很有趣。

回答

1

它是對指針的引用。像任何常規引用一樣,但底層類型是一個指針。

在引用參考指針之前,必須用雙指針來完成(一些C語言的人仍然會這樣做,我偶爾也是其中之一)。

恐怕有任何疑問,試試這個真正下沉它:

#include <iostream> 
#include <cstdlib> 

void foo (int *& p) 
{ 
    std::cout << "&p: " << &p << std::endl; 
} 

int main(int argc, char *argv[]) 
{ 
    int *q = NULL; 
    std::cout << "&q: " << &q << std::endl; 
    foo(q); 

    return EXIT_SUCCESS; 
} 

輸出(你的價值觀會有所不同,但& p == & Q)

&q: 0x7fff5fbff878 
&p: 0x7fff5fbff878 

希望很清楚在foo()確實是指qmain()的引用。

1

這不是一招,它只是簡單的類型 - 「指向Node的指針」。

n->insertmeSort((Node *&)first);調用insertmeSort將鑄件first的結果設置爲Node*&

void Node::insertme(Node *&to)聲明insertme將參考指針指向Node作爲參數。

引用和指針是如何工作的例子:

int main() { 
    //Initialise `a` and `b` to 0 
    int a{}; 
    int b{}; 
    int* pointer{&a}; //Initialise `pointer` with the address of (&) `a` 
    int& reference{a};//Make `reference` be a reference to `a` 
    int*& reference_to_pointer{pointer_x}; 

    //Now `a`, `*pointer`, `reference` and `*reference_to_pointer` 
    //can all be used to manipulate `a`. 
    //All these do the same thing (assign 10 to `a`): 
    a = 10; 
    *pointer = 10; 
    reference = 10; 
    *reference_to_pointer = 10; 

    //`pointer` can be rebound to point to a different thing. This can 
    //be done directly, or through `reference_to_pointer`. 
    //These lines both do the same thing (make `pointer` point to `b`): 
    pointer = &b; 
    reference_to_pointer = &b; 

    //Now `b`, `*pointer` and `*reference_to_pointer` can 
    //all be used to manipulate `b`. 
    //All these do the same thing (assign 20 to `b`): 
    b = 20; 
    *pointer = 20; 
    *reference_to_pointer = 20; 
} 
+0

是的,只是一個參考類型爲指針類型。 – Healer

0

* &意味着你通過引用傳遞指針。所以在這種情況下,通過引用這個函數傳遞一個指向對象的指針。如果沒有參考,此行沒有任何作用

if(!to) { 
    to=this; 
    return; 

}