gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:34:00 24 4
gpt4 key购买 nike

我在网上阅读一些代码,发现它们传递了 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 不允许传递给第二个和第三个函数。但是 pi 可以传递给所有函数。

关于c++ - 通过引用函数传递指针参数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59222476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com