通过引用函数传递指针参数是什么意思?
What does it mean to pass a pointer parameter by reference to a function?
我在网上阅读了一些代码,我发现它们传递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
可以传递给所有函数。
如果您希望调用的函数更改指针以指向其他内容,则可以通过引用传递指针。 除此之外,我没有看到任何正当理由(但有时这是一个正当理由(。
相关文章:
- 通过引用函数传递指针参数是什么意思?
- FFT函数的参数是什么意思
- v8 源代码中 ArrayMap 函数的回调 fn 参数是什么?
- 这个奇怪的函数参数是什么?
- 这个函数的参数是什么?
- OpenGL 调试 错误回调函数的 ID 参数是什么?
- 操作员[]作为成员函数的正确模板参数/参数是什么?
- 这个 lambda 的参数是什么类型?
- 函数upper_bound的参数是什么
- mpi_scatterv中的显示参数是什么?
- 这些额外的参数是什么意思
- ON_LBN_SELCHANGE的参数是什么
- 默认参数模板与可变参数模板:最后一个模板参数是什么
- D3DX11CompileFromFile中的第四个参数是什么
- 在 JavaCV 中传递给 cvFindContours() 的参数是什么?
- 这个向量类中的参数是什么
- fcntl() 中的第三个参数是什么
- 参数是什么意思
- std::vector.resize()中的第二个参数是什么意思
- 此签名中的第二个参数是什么意思