直接看代码说明:
/********************************************************* * 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开发