引用传参
现在编写一个交换swap函数,交换x,y两者的值:
# include<iostream>
using namespace std ;
void swap(int x,int y)
{
int z = x ;
x = y ;
y = z ;
}
int main()
{
int x = 10 ;
int y = 11 ;
cout << "交换之前:x:" << x << " y:" << y << endl ;
swap(x,y) ;
cout << "交换之后:x:" << x << " y:" << y << endl ;
return 0 ;
}
这段代码是不可行的,运行结果如下:
然后使用引用传参:
在swap函数的每一个参数前加一个 “&”取地址符
然后在里面直接修改这个变量即可
# include<iostream>
using namespace std ;
void swap(int &x,int &y)
{
int z = x ;
x = y ;
y = z ;
}
int main()
{
int x = 10 ;
int y = 11 ;
cout << "交换之前:x:" << x << " y:" << y << endl ;
swap(x,y) ;
cout << "交换之后:x:" << x << " y:" << y << endl ;
return 0 ;
}
运行结果如下:
引用传参:
可以实现在函数内部修改某个外部变量的值(当然这个变量要作为引用参数传进这个函数)
当我们想要return多个结果的时候也可以使用引用传参,直接修改即可
数组作为参数
数组其实是一个特殊的指针,但是这里都是c++了,就不要太考虑指针的用法了,在c++中用指针比较少。
将数组直接作为参数其实也是引用传参
当想要传一个二维数组作为参数的时候:
int say(int a[][]) ; 合法
int say(int a[3][4]) ; 合法
int say(int a[][4]) ; 合法
int say(int a[3][]) ; 不合法!
数组传参的时候其实是传了一个指针:
看下面这个例子:
# include<iostream>
using namespace std ;
void say(int a[])
{
cout << "say:" << sizeof(a) << endl ;
}
int main()
{
int a[10] ;
say(a) ;
cout << "main:" << sizeof(a);
return 0 ;
}
运行结果:
可以看到,在say函数里面对数组进行sizeof计算大小,只是计算了这个指针的大小,而在main中计算大小才是真正计算数组a的大小