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

时间:2019-12-07 02:24:05

标签: c++

我正在在线阅读一些代码,我发现它们通过了node*&而不是node*,而且我真的不明白为什么。

我的理解是,当您希望更改进行某种形式的传播回到函数外部的原始变量(指针可以这样做)时,或者您希望避免每次复制对象时都通过引用传递参数调用函数以避免复制开销,这也是指针的作用。

我错了吗?如果我是我,我怎么了?

2 个答案:

答案 0 :(得分:11)

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

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

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不允许传递给第二和第三函数。但是pi可以传递给所有函数。

答案 1 :(得分:2)

如果希望调用的函数将指针更改为指向其他对象,则可以按引用传递指针。 除此之外,我看不到任何有效的原因(但这有时是 的有效原因)。

相关问题