直接看代码说明:
/********************************************************* * Desc:参数传递:使用引用传递指针和直接传递指针地址的区别 * Author:charley * DateTime:2010-12-7 11:00
* 编译环境:win7+vs2008
***********************************************************/
#include <iostream>
using namespace std;
/*
函数声明
*/
void swapByRef(int *&,int *&);
void swapByPoi(int *,int *);
int main(void)
{
int i=10;
int j=20;
int *pi=&i; //pi指向i所在的内存地址
int *pj=&j;//pj指向j所在的内存地址
//通过引用传递参数,传递的是指针本身
cout<<"调用swapByRef()之前:pi="<<pi<<",*pi="<<*pi<<";pj="<<pj<<",*pj="<<*pj<<endl;
swapByRef(pi,pj);
cout<<"调用swapByRef()之后:pi="<<pi<<",*pi="<<*pi<<";pj="<<pj<<",*pj="<<*pj<<endl;
cout<<"**********************"<<endl;
//通过指针来传递参数,传递的是指针地址
cout<<"调用swapByPoi()之前:pi="<<pi<<",*pi="<<*pi<<";pj="<<pj<<",*pj="<<*pj<<endl;
swapByPoi(&i,&j);
//或者直接 swapByPoi(pi,pj);
cout<<"调用swapByPoi()之后:pi="<<pi<<",*pi="<<*pi<<";pj="<<pj<<",*pj="<<*pj<<endl;
getchar();
return 0;
}
/*
通过引用传递参数:
参数为整型指针的引用,
引用是指针的一个别名,传递时不需要在内存中分配空间来接收参数
参考:swapByRef(int &v1,int &v2)
*/
void swapByRef(int *&v1,int *&v2)
{
int *temp=v1;//指针赋值,指针执行的地址变化了
v1=v2;
v2=temp;
}
/*
通过指针来传递参数:
参数为整型指针变量
内存存需要为形参分配空间来接收传进来的指针地址
参考:swapByPoi(int v1,int v2)
*/
void swapByPoi(int *v1,int *v2)
{
int temp=*v1; //操作指针指向的内容,指针执行的地址未变化
*v1=*v2;
*v2=temp;
}
执行结果:
从结果可以看出:
1. swapByRef方法是直接交换参数的指针执行的地址,所以指针指向的内容也换了
2. swapByPoi方法只是操作指针指向的内容,指针执行的地址未变化
微软企业开发技术 | 移动开发(Google Android、Windows Mobile)技术| 嵌入式系统设计与开发 | JAVA开发
浙公网安备 33010602011771号