c ++ *和&同时

时间:2014-09-29 21:31:59

标签: c++ pointers reference

在我的C ++类数据结构中,我们正在研究二叉树。一些代码包含&和和*同时使用(彼此相邻),这非常令人困惑。

void balance( AvlNode * & t )

是使用它的函数定义的一个示例。这里用*和&?

会发生什么

编辑:对此的回答告诉我,我对指针和引用一无所知,但是源代码都说不同的东西,like here例如调用* dereference运算符。我在哪里可以在一个地方找到所有这些信息? (最好不要在stackoverflow上)

3 个答案:

答案 0 :(得分:6)

从右到左阅读 1 ,将&读作“对[a | an]的引用”,将*作为“指向[a | an]的指针“,所以你得到:”t是对指向AvlNode的指针的引用“。


1.对于更复杂的情况,它并不总是完全正确的左 - 它是从声明向外的名称到声明的类型。如果您有多个嵌套括号,则从名称前进到右括号,然后左键到匹配的左括号,然后从最后离开的位置到下一个右括号,依此类推,直到到达最外面的括号水平。 功能

答案 1 :(得分:1)

它是对AvlNode *

类型指针的引用的定义

例如考虑(为了说明目的,它有一个内存泄漏并不重要)

#include <iostream>

typedef int AvlNode; // It is not important what is the type AvlNode

void balance( AvlNode * & t )
{
    t = new AvlNode( 10 );
}

void another_balance( AvlNode * t )
{
    t = new AvlNode( 20 );
}

int main()
{
   AvlNode *p = NULL;

    std::cout << ( void * )p << std::endl;

    another_balance( p );

    std::cout << ( void * )p << std::endl;

    balance( p );

    std::cout << ( void * )p << std::endl;
    std::cout << *p << std::endl;

    delete p;
}

考虑函数调用的结果。

答案 2 :(得分:1)

'&amp;'当字符在函数声明或定义中使用时,它在C ++中具有特殊含义。它的意思是“通过引用传递值”。当你“通过引用传递”时,C ++会在你将变量传递给函数时自动创建变量的引用,然后它会自动在函数内取消引用它。

因此,此函数通过引用传递类型t的一个变量AvlNode *。因此,您有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);
}