参数中的星号和与号

Posted

技术标签:

【中文标题】参数中的星号和与号【英文标题】:Both asterisk and ampersand in a parameter 【发布时间】:2021-12-23 02:50:22 【问题描述】:

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

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

【问题讨论】:

想想每个在函数参数中使用时分别做了什么,然后将它们组合起来。 【参考方案1】:

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

【讨论】:

非常感谢!!这么好的解释【参考方案2】:

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

【讨论】:

以上是关于参数中的星号和与号的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ASP.net/C# 应用程序配置文件值中的值添加与号

servlet 请求参数值包含与号?

与号 url 编码和查询字符串参数问题

Xtype 中的红色星号:'label'

Python函数中的可变长参数_速记

Ruby 中的 *(星号)是啥意思? [复制]