C++ 函数参数中的指针与引用

Jac*_*son 5 c++ pointers

我想知道如何让函数改变两个变量(返回和另一个变量),我偶然发现在参数(我理解是指参数的地址)之前用“&”调用函数,然后在整个函数中,用'*'符号引用它(我猜这是一个“取消引用”,意味着它改变了地址处的对象)。

不管怎样,这一切都很好,然后有朋友说你可以直接用变量调用函数,在header中用&前面的变量引用变量,并在整个函数中正常对待它。这似乎更容易,那么为什么网络上没有更多关于它的信息呢?一种风格比另一种更正确吗?

void foo(int &junk)  //The way the friend said
{
    junk++;
}

void oof(int *junk) //what I found, and what the internet seems full of
{
    (*junk)++;
}

int main ()
{
    int junk=1;
    std::cout << junk << "\n";
    foo(junk);
    std::cout << junk << "\n";
    oof(&junk);
    std::cout << junk;
}
Run Code Online (Sandbox Code Playgroud)

这输出:

1
2
3
Run Code Online (Sandbox Code Playgroud)

所以一切正常,我想。

das*_*ght 7

第一种方法称为“通过引用传递”;第二种方法称为“通过指针传递”。在第一种情况下,取消引用是隐式的(没有星号);在第二种情况下,取消引用是显式的。

两种方法之间最大的区别在于,当您传递指针时,您可以传递“无”(即空指针)。当您通过引用传递时,不可能合法地传递对任何内容的引用:它应该是对某个变量、数组元素、类或结构的字段等的引用。

当您需要返回值并修改变量时,通过引用传递更合适,因为您需要修改的变量始终存在。当您遍历由指针连接的动态数据结构时,当该数据结构的某些部分可能存在或可能不存在时,通过指针传递变得更合适。