【问题标题】:Both asterisk and ampersand in a parameter参数中的星号和与号
【发布时间】:2012-12-28 04:31:12
【问题描述】:

我正在阅读一本关于二叉搜索树的书,但出现了一些奇怪的东西。我在函数参数中遇到了以下声明。

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

【问题讨论】:

  • 想想每个在函数参数中使用时分别做了什么,然后将它们组合起来。

标签: c++ pointers reference memory-address


【解决方案1】:

这是对指针的引用。你可以在这个函数里改变指针,它会在外面改变。

【讨论】:

    【解决方案2】:

    在你的表情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;  
    

    【讨论】:

    • 非常感谢!!这么好的解释
    猜你喜欢
    • 2021-09-21
    相关资源
    最近更新 更多