void add(int *a)
{
(*a) = (*a) -5 ;
}
//值传递,将实参的一个副本作为函数形参传递给函数
void swapValue(int a,int b)
{
int temp=a;
a =b;
b=temp;
}
//指针传递参数,将实参的地址传递给函数内部,虽然作了副本传入,但是改变是仍是实参地址上的值。
void swapByPointer(int *a, int *b)
{
int temp = *a;
*a=*b;
*b=temp;
}
//引用传递,此时传递给函数的是由主调函数放进来的实参变量的地址.
//被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。
// 正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量
void swapByRef( int &a, int &b)
{
int temp = a;
a = b;
b=temp;
}
//传递指向指针的引用,实现两个指针的交换。
void swapByPointerRef(int * &a, int *&b)
{
int *temp = a;
a=b;
b=temp;
}
int main()
{
int a = 10;
int b = 20;
int *pa = &a;
int *pb = &b;
cout<<"a = "<<a<<" b = "<<b<<endl;
cout<<"*pa = "<<*pa<<" *pb = "<<*pb<<endl;
cout<<"pa = "<<pa<<" pb = "<<pb<<endl;
add(&a);
cout<<"===a = "<<a<<endl;
swapValue(a,b);
cout<<endl<<"swapValue \n";
cout<<"a = "<<a<<" b = "<<b<<endl;
cout<<"*pa = "<<*pa<<" *pb = "<<*pb<<endl;
cout<<"pa = "<<pa<<" pb = "<<pb<<endl;
swapByPointer(&a,&b);
cout<<"\n swapByPointer \n";
cout<<"a = "<<a<<" b = "<<b<<endl;
cout<<"*pa = "<<*pa<<" *pb = "<<*pb<<endl;
cout<<"pa = "<<pa<<" pb = "<<pb<<endl;
swapByRef(a,b);
cout<<"\n swapByRef \n";
cout<<"a = "<<a<<" b = "<<b<<endl;
cout<<"*pa = "<<*pa<<" *pb = "<<*pb<<endl;
cout<<"pa = "<<pa<<" pb = "<<pb<<endl;
swapByPointerRef(pa,pb);
cout<<"\n swapByPointerRef \n";
cout<<"a = "<<a<<" b = "<<b<<endl;
cout<<"*pa = "<<*pa<<" *pb = "<<*pb<<endl;
cout<<"pa = "<<pa<<" pb = "<<pb<<endl;
return 0;
}
输出结果:
a = 10 b = 20
*pa = 10 *pb = 20
pa = 0012FF60 pb = 0012FF54
===a = 5
swapValue
a = 5 b = 20
*pa = 5 *pb = 20
pa = 0012FF60 pb = 0012FF54
swapByPointer
a = 20 b = 5
*pa = 20 *pb = 5
pa = 0012FF60 pb = 0012FF54
swapByRef
a = 5 b = 20
*pa = 5 *pb = 20
pa = 0012FF60 pb = 0012FF54
swapByPointerRef
a = 5 b = 20
*pa = 20 *pb = 5
pa = 0012FF54 pb = 0012FF60