参数中的星号和与号
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】:这是对指针的引用。你可以在这个函数里改变指针,它会在外面改变。
【讨论】:
以上是关于参数中的星号和与号的主要内容,如果未能解决你的问题,请参考以下文章