这到底是做什么的?
void insertar (struct pila *&p);
*&
与仅像这样声明方法相比,使用的优点是什么:
void insertar (struct pila *p);
或者像这样:
void insertar (struct pila &p);
我知道*
是指针和&
地址,但都在方法签名中?
有什么好处?
它们是用来做什么的?
它有什么作用?
这到底是做什么的?
void insertar (struct pila *&p);
*&
与仅像这样声明方法相比,使用的优点是什么:
void insertar (struct pila *p);
或者像这样:
void insertar (struct pila &p);
我知道*
是指针和&
地址,但都在方法签名中?
有什么好处?
它们是用来做什么的?
它有什么作用?
您混淆了 的两种含义&
。在表达式中使用时,它是“地址”运算符。也就是说,如果你有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);
这&
是一个参考。A*&
非常类似于**
. 它将允许您更改指针。
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).
}