3

这到底是做什么的?

void insertar (struct pila *&p);

*&与仅像这样声明方法相比,使用的优点是什么:

void insertar (struct pila *p);

或者像这样:

void insertar (struct pila &p);

我知道*是指针和&地址,但都在方法签名中?

有什么好处?

它们是用来做什么的?

它有什么作用?

4

3 回答 3

5

您混淆了 的两种含义&。在表达式中使用时,它是“地址”运算符。也就是说,如果你有int x;并且你有&x,你会得到 的地址x。但是,在一个类型中,&意味着它是一个引用类型。这是两个完全不同的概念。

以下采用pila, 将其复制到函数中。修改p只会影响函数内部的副本:

void insertar(pila p);

下面pila通过引用,使函数内部的对象与外部相同。这里修改p会修改传入的对象:

void insertar(pila& p);

下面是一个指向 a 的指针pila,将指针复制到函数中。修改指针只会在函数内部产生影响。它指向的对象与外部相同:

void insertar(pila* p);

下面通过引用获取指向 a 的指针pila,因此函数内部的指针与外部的指针相同。如果你修改了指针,你也会在外面修改指针:

void insertar(pila*& p);
于 2013-02-16T17:58:21.423 回答
1

&是一个参考。A*&非常类似于**. 它将允许您更改指针。

int u = 3;

void change( int *& p ) {
    p = &u;
}

void main() {
    int *p;
    change( p );
    // p == &u
}
于 2013-02-16T18:08:53.137 回答
0

*&是对您示例中的指针的引用。总之,可以修改指针指向的数据指针本身。例子:

int global1 = 0, global2 = 1;
void func(int*& p)
{
    *p = 42;
    p = &global1;
}

int main()
{
    int* p = &global2;
    func(p); // Now global2 == 42 and p points to global1 (p == &global1).
}
于 2013-02-16T17:58:26.403 回答