2013-01-14 52 views
9

मैं बाइनरी सर्च ट्री के बारे में एक पुस्तक पढ़ रहा हूं और कुछ अजीब आया है।पैरामीटर में दोनों तारांकन और एम्परसैंड सी ++

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; 
}; 

privateinsert समारोह publicinsert समारोह के लिए सहायक समारोह है, और privateinsert समारोह प्रत्यावर्तन का उपयोग कर सम्मिलित करने के लिए सही जगह के लिए लग रहा है।

भाग जो मुझे समझ में नहीं आता है BinaryNode * & t पैरामीटर में है। इसका क्या मतलब है? t के पते का सूचक?

+1

फ़ंक्शन पैरामीटर में उपयोग किए जाने पर प्रत्येक अलग से क्या करता है इसके बारे में सोचें और फिर उन्हें गठबंधन करें । – chris

उत्तर

10

अपने अभिव्यक्ति में BinaryNode * & t)

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

तो tBinaryNode वर्ग के सूचक के संदर्भ में है।

टी के पते का सूचक?

आप सी ++ में ampersand & ऑपरेटर उलझन में हैं। जो एक चर का पता देते हैं। लेकिन वाक्यविन्यास अलग है।

ampersand & चर के कुछ के सामने नीचे की तरह:

BinaryNode b; 
BinaryNode* ptr = &b; 

लेकिन निम्नलिखित तरीके संदर्भ चर के लिए है (इसके सरल सूचक नहीं):

BinaryNode b; 
BinaryNode & t = b; 

और अपने नीचे की तरह है:

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

हैरी चो, अगर आपको कोई संदेह है तो मुझे बताएं ... –

+0

आपको बहुत धन्यवाद !! इस तरह के एक महान स्पष्टीकरण –

2

यह पॉइंटर का संदर्भ है, आप इस फ़ंक्शन में पॉइंटर बदल सकते हैं और यह बाहर बदल जाएगा। सरल उदाहरण http://liveworkspace.org/code/1EfD0Q $ 8