漫步云端

移动开发(Android、iPhone、Windows Mobile) | JAVA | C | C++ | .net | Objective C | 微软企业开发技术 | 嵌入式系统设计与开发
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一个传值的问题”*&”与”*”

Posted on 2010-12-08 00:32  charley_yang  阅读(819)  评论(0编辑  收藏  举报

直接看代码说明:

 

/*********************************************************
* 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

 

从结果可以看出:

1. swapByRef方法是直接交换参数的指针执行的地址,所以指针指向的内容也换了

2. swapByPoi方法只是操作指针指向的内容,指针执行的地址未变化