c++;*及;同时 在C++类中的数据结构中,我们研究二叉树。有些代码包含同时使用&和*的位置(紧挨着彼此),这非常令人困惑 void balance( AvlNode * & t )

c++;*及;同时 在C++类中的数据结构中,我们研究二叉树。有些代码包含同时使用&和*的位置(紧挨着彼此),这非常令人困惑 void balance( AvlNode * & t ),c++,pointers,reference,C++,Pointers,Reference,是函数定义的一个示例,其中使用了该函数。这里的*和&发生了什么 编辑:这个问题的答案告诉我,我真的对指针和引用一无所知,但是源代码都说了不同的东西,例如调用*解引用操作符。我在哪里可以在一个地方找到所有这些信息?(最好不在stackoverflow上)它是对类型为AvlNode* 例如,考虑(出于演示目的,内存泄漏并不重要) #包括 typedef int AvlNode;//AvlNode的类型并不重要 无效余额(平均节点*&t) { t=新的AvlNode(10); } 作废另一个_余额(A

是函数定义的一个示例,其中使用了该函数。这里的*和&发生了什么


编辑:这个问题的答案告诉我,我真的对指针和引用一无所知,但是源代码都说了不同的东西,例如调用*解引用操作符。我在哪里可以在一个地方找到所有这些信息?(最好不在stackoverflow上)

它是对类型为
AvlNode*

例如,考虑(出于演示目的,内存泄漏并不重要)

#包括
typedef int AvlNode;//AvlNode的类型并不重要
无效余额(平均节点*&t)
{
t=新的AvlNode(10);
}
作废另一个_余额(AvlNode*t)
{
t=新的AvlNode(20);
}
int main()
{
AvlNode*p=NULL;
std::cout从右到左读取1,将
&
读取为“对[a | an]的引用”,将
*
读取为“指向[a | an]的指针”,因此得到:“t是对指向AvlNode的指针的引用”


1.对于更复杂的情况,它并不总是完全从右向左——它是从向外声明的名称到声明的类型。如果有多个嵌套括号,则从名称到右括号,然后从左括号到匹配的左括号,然后从上一个左括号到下一个右括号论文等等,直到你达到最外层的层次。

< P>在函数声明或定义的内部使用“&”字符有特殊含义。它意味着“按引用传递值”。当“通过引用”时,C++ C++将自动创建变量的引用,当您将其传递给函数时,它将自动在函数内解开它。

因此,此函数通过引用传递一个
AvlNode*
类型的变量
t
。因此,您有
AvlNode*&t

例如:

void balance( AvlNode * & t )
{...}

main()
{
   AvlNode * a = new AvlNode();
   balance(a);
}
同:

void balance( AvlNode ** t_ptr )
{
   AvlNode * t = *t_ptr;
   ...
}

main()
{
   AvlNode * a = new AvlNode();
   balance(&a);
}

这是对指针的引用。如果您还不习惯使用引用和指针,请参阅“顺时针螺旋规则”,以在您的头脑中解析此类内容。
void balance( AvlNode ** t_ptr )
{
   AvlNode * t = *t_ptr;
   ...
}

main()
{
   AvlNode * a = new AvlNode();
   balance(&a);
}