参数c ++中的星号和&符号

时间:2013-01-14 07:30:31

标签: c++ pointers reference memory-address

我正在读一本关于二元搜索树的书,并且出现了一些奇怪的东西。

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

private insert函数是public insert函数的辅助函数,private insert函数查找要插入的正确位置使用递归。

我不理解的部分是参数中的BinaryNode * & t。这是什么意思? 地址指针t

2 个答案:

答案 0 :(得分:12)

在您的表达式BinaryNode * & t)

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

所以t是对 BinaryNode 类的指针的引用。

  

t的地址指针<?p>

您在c ++中感到困惑ampersand &运算符。给出一个变量的地址。但语法不同。

ampersand &在一些变量前面如下:

BinaryNode b;
BinaryNode* ptr = &b;

但是下面的方法是参考变量(它的简单非指针):

BinaryNode b;
BinaryNode & t  = b; 

和你的情况如下:

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

答案 1 :(得分:2)

它是指针的引用,你可以改变这个函数中的指针,它会在外面改变。 简单示例http://liveworkspace.org/code/1EfD0Q $ 8