?代码:
#include<iostream>
using namespace std;
//第一个函数以值传递的方式使用指针,所有改变都局限于函数内部,
//当函数执行完毕后既不会改变指针本身的值,也不会改变指针所指的内容。
void SwapPoint1(int *p,int *q){
int * tmp = p;
p = q;
q = tmp;
}
//第二个函数同样以值传递的方式使用指针,
//但是在函数内部通过解引用的方式直接访问内存并修改了指针所指的内容。
void SwapPoint2(int *p,int *q){
int tmp = *p;
*p = *q;
*q = tmp;
}
//函数的参数形式是int *&,
//其含义是,该参数是一个引用,引用的对象是内存中的一个int 指针,
//使用这种方式可以把指针当成对象,交换指针本身的值。需要注意的是,
//最后一个函数既然交换了指针,当然解引用该指针所得的结果也会相应发生改变。
void SwapPoint3(int *&p,int *&q){
int * tmp = p;
p = q;
q = tmp;
}
int main(){
int a=5,b=10;
int *p = &a, *q = &b;
cout<<"交换前p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
cout<<"交换前p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
cout<<endl;
SwapPoint1(p,q);
cout<<"交换后p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
cout<<"交换后p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
cout<<endl;
a = 5,b = 10;
p = &a,q = &b;
cout<<"交换前p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
cout<<"交换前p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
cout<<endl;
SwapPoint2(p,q);
cout<<"交换后p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
cout<<"交换后p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
cout<<endl;
a = 5,b = 10;
p = &a,q = &b;
cout<<"交换前p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
cout<<"交换前p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
cout<<endl;
SwapPoint3(p,q);
cout<<"交换后p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
cout<<"交换后p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
return 0;
}
输出:
交换前p的值是:0x66ff24 q的值是:0x66ff20
交换前p所指的值是:5 q所指的值是:10
交换后p的值是:0x66ff24 q的值是:0x66ff20
交换后p所指的值是:5 q所指的值是:10
交换前p的值是:0x66ff24 q的值是:0x66ff20
交换前p所指的值是:5 q所指的值是:10
交换后p的值是:0x66ff24 q的值是:0x66ff20
交换后p所指的值是:10 q所指的值是:5
交换前p的值是:0x66ff24 q的值是:0x66ff20
交换前p所指的值是:5 q所指的值是:10
交换后p的值是:0x66ff20 q的值是:0x66ff24
交换后p所指的值是:10 q所指的值是:5
请按任意键继续. . .
|