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

标签 c++ pointers

<分区>

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

反正一切顺利,然后 friend 说你可以直接用变量调用函数,在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;
}

这个输出:

1
2
3

所以我认为一切正常。

最佳答案

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

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

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

关于c++ - C++ 函数参数中的指针与引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17900022/

相关文章:

c - 如何编写在C中传递给Variadic函数的变量

c++ - 如何在矩阵上实现 bfs?

c# - 数组大小超出寻址限制(C# 与 C++)

c++ - 与 libfpx.so 链接错误 : undefined reference to

c++ - 拆分函数的声明和定义,还是删除函数头中的新运算符?

c - C语言中函数指针有什么好处?

c++ - std::uniform_real_distribution 在失去随机性之前可以生成多少个随机数?

c - C编程:使用malloc,指针和数组

c++ - 函数指针指针数组

java - 如何使 Renderscript 更新结构体指针?