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、 我会要求主持人删除这个。这个问题是关于通过引用传递和通过指针传递…不是通过值传递…很好的类比,但没有回答这个问题