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

Pointer and references in c++ as arguments

本文关键字:参数 引用 指针 c++      更新时间:2023-10-16

这到底能做什么?

void insertar (struct pila *&p);

使用*&与只这样声明方法相比有什么优势:

void insertar (struct pila *p);

或者类似的:

void insertar (struct pila &p);

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

优势是什么?

它们的用途是什么?

它做什么?

您混淆了&的两种含义。在表达式中使用时,它是"address of"运算符。也就是说,如果你有一个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);

这里&是一个参考。*&**非常相似。它将允许您更改指针。

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

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

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).
}