c++中的指针和引用作为参数
Pointer and references in c++ as arguments
这到底能做什么?
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).
}
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 通过常量引用传递参数的矩阵模板类
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 具有常量引用参数的函数模板专用化
- 作为参数引用
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 如何传递带有通过引用传递的结构参数的函数?
- 将输入参数作为右值引用传递?
- 使用引用与指针将数组作为参数传递
- 根据模板参数引用不同基类的函数
- 默认情况下C++数组作为参数引用
- 对指针C++的参数引用
- 作为非类型模板参数引用
- 重用返回语句或按参数引用返回
- 将参数引用传递给函数C++
- 从另一个参数引用的模板可变参数
- 成员变量多态性和参数引用
- 按参数引用或按参数引用之间的差异
- 无法实例化抽象类:为什么模板参数(引用)导致这种情况