这究竟是做什么的?
void insertar (struct pila *&p);
使用*&
的优点是什么?如果方法只是如此声明:
void insertar (struct pila *p);
或者像这样:
void insertar (struct pila &p);
我知道*
是指针而&
是地址,但两者都在方法签名中?
有什么好处?
它们用于什么?
它做了什么?
答案 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).
}