通过引用函数传递指针参数是什么意思?

What does it mean to pass a pointer parameter by reference to a function?

本文关键字:参数 是什么 意思 指针 引用 函数      更新时间:2023-10-16

我在网上阅读了一些代码,我发现它们传递node*&而不仅仅是node*,我真的不明白为什么。

我的理解是,当您希望更改传播回函数外部的原始变量(指针会这样做(时,或者如果您想避免每次调用函数时都复制对象以避免复制开销时,您通过引用传递参数这也是指针会做的事情。

是我错了还是他们错了?如果我是,我错了什么?

当你通过引用传递时,它充当别名 - 无论是普通对象还是指针。

为了详细解释,让我们考虑以下声明:

int i = 10, *pi = &i;

现在,以下是在各种函数中传递和使用它们的不同含义:

void foo_pointer (int* p) // 1st (can pass `&i` and `pi`)
{ 
*p = 0;  // modifies `i`
p = nullptr; // no effect on `pi`
}
void foo_pointer_reference (int*& p) // 2nd  (can pass `pi`)
{ 
*p = 0;  // modifies `i`
p = nullptr; // modifies `pi`
}
void foo_const_pointer_reference (const int*& p) // 3rd (can pass `pi`)
{ 
*p = 0;  // ERROR
p = nullptr; // modifies `pi`
}
void foo_const_pointer_const_reference (const int* const& p) // 4th (can pass `&i` and `pi`)
{ 
*p = 0;  // ERROR
p = nullptr; // ERROR
}

从上面的例子中,您可以看到将T*&声明为函数参数的另一个用例是,它仅限制对该函数的指针传递。 即在上述情况下,不允许将&i传递给第 2 和第 3 个函数。但是pi可以传递给所有函数。

如果您希望调用的函数更改指针以指向其他内容,则可以通过引用传递指针。 除此之外,我没有看到任何正当理由(但有时这是一个正当理由(。