这两种有什么区别啊
特别是加了的那种 表达什么意思啊(不好意思特殊符号它不允许我打出来)
加了&符号的是引用参数,没加的是传值参数。
区别是,如果是传值参数,会克隆实参并传给形参。所以,在函数内部对形参进行更改并不会影响外部的实参。
如果是引用参数,实际上形参就是实参的别名,它们公用同一块内存地址,所以在函数内部对形参的更改也会影响到外部的实参。
举个典型的例子,写一个Swap
函数,用来交换两个数。
如果这样写,是没有效果的,因为在调用Swap
函数时传入的是num1
和num2
的副本:
void Swap(int a, int b)
{
int temp = a;
a = b;
b = a
}
int main()
{
int num1 = 0, num2 = 1;
Swap(num1, num2);
return 0;
}
但是如果这样写,就有效了,因为形参a
和b
与实参num1
和num2
指向用一块内存,在Swap
中做的更改也会影响到num1
和num2
:
void Swap(int &a, int &b) // 使用引用参数
{
int temp = a;
a = b;
b = a
}
int main()
{
int num1 = 0, num2 = 1;
Swap(num1, num2);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: