#include<iostream>
using namespace std;
void swap_1(int *p1,int *p2)//形参变量p1得到实参p的值&a,形参变量p2得到实参q的值&b,接着进行交换
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
void swap_2(int *p1,int *p2)
{
int *temp;
*temp=*p1;//此语句有问题 应该将*p1的值赋给一个临时的整型变量,即可进行交换
//temp所指向的单元是不可预见的,在这样的情况下,对*temp赋值是危险的。
*p1=*p2;
*p2=*temp;
}
void swap_3(int p1,int p2)//因为只能从实参向形参传递数据,形参值的改变无法回传给实参,即“单向值传递”
{
int t;
t=p1;
p1=p2;
p2=t;
}
int main()
{
int a=3,b=4;
int *p,*q;
p=&a;
q=&b;
cout<<"原始:"<<"a="<<a<<",b="<<b<<endl;
swap_1(p,q);
cout<<"swap_1:"<<"a="<<a<<",b="<<b<<endl;
//swap_2(p,q);
//cout<<"swap_2:"<<"a="<<a<<",b="<<b<<endl;
swap_3(a,b);
cout<<"swap_3:"<<"a="<<a<<",b="<<b<<endl;//可见,a与b的值没有交换回来
system("pause");
return 0;
}
swap_1:用指针做函数参数,指针传的是地址,肯定可以通过修改形参指针变量所指向的值,来打到修改 a与b的值。
swap_3:如果仅仅只是值传递,只能从实参向形参传数据,形参的值的改变无法传回实参。
除此之外,调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。
下面的swap同样无法交换:
void swap(int *p1,int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}