C++函数中参数的传递方式是传值。在函数域中为参数重新分配内存,而把实参的数值传递到新分配的内存中。它的优点是有效避免函数的副作用(即函数修改了原始数值a,b)。
1 #include<iostream> 2 void fun(int x, int y) 3 { 4 x = 10; 5 y = 20; 6 } 7 8 int main(int argc, char **argv) 9 { 10 int a, b; 11 a = 100; 12 b = 200; 13 fun(a, b); 14 getchar(); 15 return 0; 16 }
形参x,y重新开辟了内存。
如果要求改变实参的值、怎么办呢?
C的做法,值传递不能交换2个参数值,就有指针传递
1 #include<iostream> 2 3 void swap(int *x, int *y) 4 { 5 int tmp = *x; 6 *x = *y; 7 *y = tmp; 8 } 9 int main(int argc, char **argv) 10 { 11 int a, b; 12 a = 100; 13 b = 200; 14 swap(&a,&b); 15 getchar(); 16 return 0; 17 }
但是这种做法,对于swap里面参数来说,还是需要开辟指针变量占用的空间
如果实参是一个复杂的对象,重新分配内存会引起程序执行效率大大下降,怎么办呢?在C++中有一种新的导出型数据类型—引用(reference)可以解决上面的难题。引用又称别名(alias)。
1 #include<iostream> 2 3 void swap(int &x, int &y) 4 { 5 int tmp = x; 6 x = y; 7 y = tmp; 8 } 9 int main(int argc, char **argv) 10 { 11 int a, b; 12 a = 100; 13 b = 200; 14 swap(a,b); 15 getchar(); 16 return 0; 17 }