C++ 通过引用传递还是通过指针传递?

C++ 通过引用传递还是通过指针传递?,c++,C++,可能重复: 通过引用传递和通过指针传递值之间有什么区别?通过引用传递参数时,函数内的参数是从外部传递的变量的别名。通过指针传递变量时,获取变量的地址并将地址传递到函数中。主要区别在于,可以将没有地址(如数字)的值传递到采用常量引用的函数中,而不能将无地址的值传递到采用常量指针的函数中 典型的C++编译器将引用作为隐藏指针实现。 您可以通过以下方式将函数更改为指针变量: void flip(int *i) // change the parameter to a pointer type {

可能重复:


通过引用传递和通过指针传递值之间有什么区别?

通过引用传递参数时,函数内的参数是从外部传递的变量的别名。通过指针传递变量时,获取变量的地址并将地址传递到函数中。主要区别在于,可以将没有地址(如数字)的值传递到采用常量引用的函数中,而不能将无地址的值传递到采用常量指针的函数中

典型的C++编译器将引用作为隐藏指针实现。 您可以通过以下方式将函数更改为指针变量:

void flip(int *i) // change the parameter to a pointer type
{
    cout << "          flip start "<<"i="<< *i<<"\n"; // replace i by *i
    *i = 2*(*i); // I'm not sure it the parenthesis is really needed here,
                 // but IMHO this is better readable
    cout << "          flip exit  "<<"i="<< *i<<"\n";
}

int main()
{
    int j =1;
    cout <<"main j="<<j<<endl;
    flip(&j); // take the address of j and pass this value
    // adjust all other references ...
}
void flip(int*i)//将参数更改为指针类型
{

cout对于问题的第二部分,这里是代码

#include <iostream>
#include <cassert>

using namespace std;

void flip(int *i)
{
    cout << "          flip start "<<"i="<< i<<"\n";
    *i *= 2;
    cout << "          flip exit  "<<"i="<< i<<"\n";
}

int main()
{
    int j =1;
    cout <<"main j="<<j<<endl;
    flip(&j);
    cout <<"main j="<<j<<endl;
    flip(&j);
    cout <<"main j="<<j<<endl;
    flip(&j);
    cout <<"main j="<<j<<endl;

    assert(j==8);

    return 0;
}
#包括
#包括
使用名称空间std;
无效翻转(int*i)
{

cout从技术上讲,你只需要在变量名前加一个星号就可以通过引用传递;)然后它就会传递变量在内存中的地址

现在,通过引用传递和通过值传递的区别很简单。这样想吧。想象一下你正试图给你的朋友一块糖果

如果按值传递。。 你:嘿,我要给你点东西。。 朋友:是什么? 你:这里 朋友:谢谢xD

如果您通过引用传递。。 你:嘿,我要给你点东西。。 朋友:是什么? 你:它在桌子的右边,放着饼干罐 朋友:谢谢xD

如果你通过价值传递,你的朋友不知道糖果从哪里来。它可能来自商店、冰箱或任何地方。现在如果你通过参考传递,你的朋友不知道你要给他什么


为了将其与编程联系起来,candy是变量的值。指令“它位于cookie jar所在的表的右侧”是变量值所在位置的内存地址。您将在数据结构中使用它,所以是:)希望我能以任何方式帮助您xD

这个问题在这里大约有100万个重复项。请参阅右侧的相关列表。对不起,我应该在发布问题之前检查答案n、 我会要求主持人删除这个。这个问题是关于通过引用传递和通过指针传递…不是通过值传递…很好的类比,但没有回答这个问题