参数中的星号和&号

Both asterisk and ampersand in a parameter

本文关键字:参数      更新时间:2023-10-16

我正在读一本关于二叉搜索树的书,然后出现了一些奇怪的事情。我在一个函数形参中遇到了下面的声明:

BinaryNode * & t

这是什么意思?

t的地址指针

对于上下文,这是我看到这个的代码。私有insert函数是公有insert函数的辅助函数,私有insert函数通过递归的方式寻找合适的插入位置。

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

在你的表达式BinaryNode * & t)

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

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

t的地址指针?

您混淆了c++中的ampersand &操作符。给出一个变量的地址。但是语法是不同的。

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

BinaryNode b;
BinaryNode* ptr = &b;

但是下面的方法是用于引用变量(它简单的不是指针):

BinaryNode b;
BinaryNode & t  = b; 

和你的如下:

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

这是对指针的引用。