1、非饮用传递 例子:
int swap(int a,int b)
{
int temp = b;
b=a;
a=temp;
return a;
}
int num=swap(3,5);//num还是3,因为非饮用传递只改变了函数体内部的值,实参的值未发生任何变化。所以swap()不起作用
2、指针形参 例子
void swap(int *a,int *b)
{
int temp = &b;
&b=&a;
&a=temp;
}
int i=3;int j=5;int *a=&i;int *b=&j;
swap(a,b);//则a和b指向的值发生了改变
3、饮用形参方法
void swap(int &a,int &b)
{
int temp = b;
b=a;
a=temp;;
}
int i=3;int j=5;swap(i,j);//结果i和j同样进行了交换
4、传递指向指针的引用
void swap(int *&a,int *&b)
{
int *temp=b;
b=a;
a=temp;
}
int i=3;int j=5;int *a=&i;int *b=&j;
cout<<"before swap:"<<"*a:"<<*a<<"*b"<<*b<<endl;
swap(a,b);
cout<<"after swap:"<<"*a:"<<*a<<"*b"<<*b<<endl;
结果是,before是3,5;after后是5,3
//也就是说指针的值被交换了。而int *&a可以看做是一个int类型指针的别名