之间有什么区别
- 通过引用传递的参数
- 通过值传递参数?
请给我一些例子。
#1楼
按值传递是指如何通过使用参数将值传递给函数。 在按值传递时,我们复制存储在指定变量中的数据,并且比通过引用传递数据要慢。 我们对复制的数据进行更改,原始数据不受影响。 通过引用或地址传递,我们将直接链接发送到变量本身。 或将指针传递给变量。 它更快,花费更少的时间
#2楼
简而言之,按值传递是什么,按引用传递是在哪里。
如果您的值为VAR1 =“ Happy Guy!”,则只会看到“ Happy Guy!”。 如果VAR1更改为“ Happy Gal!”,您将不会知道。 如果通过引用传递了它,并且VAR1发生了变化,那么您将。
#3楼
最简单的方法是在Excel文件中。 举例来说,假设您在单元格A1和B1中有两个数字5和2,而您想在第三个单元格中找到它们的总和,例如A2。 您可以通过两种方式执行此操作。
通过在此单元格中键入= 5 + 2 将其值传递到单元格A2中 。 在这种情况下,如果单元格A1或B1的值发生变化,则A2中的总和保持不变。
或者通过键入= A1 + B1 将单元格A1和B1的“引用”传递到单元格A2 。 在这种情况下,如果单元格A1或B1的值更改,则A2中的总和也更改。
#4楼
这是一个示例,演示按值传递-指针值-引用之间的区别:
void swap_by_value(int a, int b){
int temp;
temp = a;
a = b;
b = temp;
}
void swap_by_pointer(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void swap_by_reference(int &a, int &b){
int temp;
temp = a;
a = b;
b = temp;
}
int main(void){
int arg1 = 1, arg2 = 2;
swap_by_value(arg1, arg2);
cout << arg1 << " " << arg2 << endl; //prints 1 2
swap_by_pointer(&arg1, &arg2);
cout << arg1 << " " << arg2 << endl; //prints 2 1
arg1 = 1; //reset values
arg2 = 2;
swap_by_reference(arg1, arg2);
cout << arg1 << " " << arg2 << endl; //prints 2 1
}
“通过引用”方法具有重要的局限性 。 如果一个参数被声明为通过引用传递 (因此它前面带有 &符号),则其对应的实际参数必须是variable 。
指代“通过值传递”形式参数的实际参数通常可以是表达式 ,因此它不仅可以使用变量,而且可以使用文字或函数调用的结果。
该函数不能将值放在变量以外的其他值中。 它不能为文字分配新值,也不能强制表达式更改其结果。
PS:您也可以在当前主题中检查Dylan Beattie答案,以简单的语言对其进行解释。
#5楼
按值传递-该函数复制变量并使用副本(因此它不会更改原始变量中的任何内容)
通过引用传递-该函数使用原始变量,如果您在另一个函数中更改了该变量,则它也会在原始变量中进行更改。
示例(复制并自己使用/尝试一下):
#include <iostream>
using namespace std;
void funct1(int a){ //pass-by-value
a = 6; //now "a" is 6 only in funct1, but not in main or anywhere else
}
void funct2(int &a){ //pass-by-reference
a = 7; //now "a" is 7 both in funct2, main and everywhere else it'll be used
}
int main()
{
int a = 5;
funct1(a);
cout<<endl<<"A is currently "<<a<<endl<<endl; //will output 5
funct2(a);
cout<<endl<<"A is currently "<<a<<endl<<endl; //will output 7
return 0;
}
保持简单,偷看。 文字墙可能是个坏习惯。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3156276