2013-01-14 10 views
9

Sto leggendo un libro sull'albero di ricerca binaria e qualcosa di strano è venuto fuori.sia asterisco che commerciale in un parametro C++

class BST 
{ 
public: 
    void insert(const Comparable & item) 

private: 
    BinaryNode *root; 
    struct BinaryNode 
    { 
     Comparable element; 
     BinaryNode *left; 
     BinaryNode *right; 
     BinaryNode(const Comparable & theElement, BinaryNode *lt, BinaryNode *rt) : 
      element(theElement), left(lt), right(rt) {} 
    } 
    void insert(const Comparable & item, BinaryNode * & t) const; 
}; 

La funzione privateinsert è funzione di supporto per publicinsert funzione e privateinsert la funzione cerca il posto giusto per inserire utilizzando la ricorsione.

Parte che non capisco è BinaryNode * & t nel parametro. Cosa significa? Puntatore dell'indirizzo di t?

+1

Pensa a ciò che ciascuno fa separatamente quando viene utilizzato in un parametro di funzione e quindi li combina . – chris

risposta

10

Nella tua espressione BinaryNode * & t)

  BinaryNode*    & t 
      -------------    ----- 
      BinaryNode pointer  t is reference variable 

così t è riferimento al puntatore di BinaryNode classe.

Puntatore dell'indirizzo di t?

Si è confuso l'operatore ampersand & in C++. che danno l'indirizzo di una variabile. ma la sintassi è diversa.

ampersand & di fronte alcune delle variabili come di seguito:

BinaryNode b; 
BinaryNode* ptr = &b; 

Ma segue è per la variabile di riferimento (la sua semplice non pointer):

BinaryNode b; 
BinaryNode & t = b; 

e il vostro è come di seguito:

BinaryNode b; 
BinaryNode* ptr = &b; 
BinaryNode* &t = ptr; 
+1

Harry Cho, fammi sapere se hai altri dubbi ... –

+0

Grazie mille !! una così grande spiegazione –

Problemi correlati