指针和c ++中的引用作为参数

时间:2013-02-16 17:54:04

标签: c++

这究竟是做什么的?

void insertar (struct pila *&p);

使用*&的优点是什么?如果方法只是如此声明:

void insertar (struct pila *p);

或者像这样:

void insertar (struct pila &p);

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

有什么好处?

它们用于什么?

它做了什么?

3 个答案:

答案 0 :(得分:5)

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

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

void insertar(pila p);

以下通过引用获取pila,以便函数内部的对象与外部对象相同。在此处修改p将修改传入的对象:

void insertar(pila& p);

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

void insertar(pila* p);

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

void insertar(pila*& p);

答案 1 :(得分:1)

此处&是参考。 *&**非常相似。它将允许您更改指针。

int u = 3;

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

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

答案 2 :(得分: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).
}