指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.

inta=1;int*p=&a;inta=1;int&b=a;

上面定义了一个×××变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。

而下面2句定义了一个×××变量a和这个×××a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。

#include<iostream>#include<string.h>usingnamespacestd;voidswap(char*&a,char*&b)/*使用引用指针做参数*/{char*temp;temp=a;/*进行数值的交换*/a=b;b=temp;}voidswap2(int*a,int*b)//传地址{inttemp=*a;*a=*b;*b=temp;}voidswap3(int&c,int&d)//引用{inttemp;temp=c;c=d;d=temp;}intmain(){char*stra="oneworld";/*字符串指针*/char*strb="onedream";inta=1,b=2;intc=3,d=4;cout<<"地址传递:"<<endl;cout<<"swap前:a="<<a<<""<<"b="<<b<<endl;swap2(&a,&b);cout<<"swap后:a="<<a<<""<<"b="<<b<<endl;cout<<"引用传递:"<<endl;cout<<"swap前:c="<<c<<""<<"d="<<d<<endl;swap3(c,d);cout<<"swap后:c="<<c<<""<<"d="<<d<<endl;cout<<"引用传递:"<<endl;cout<<"swap前stra:"<<stra<<endl;/*输出字符串*/cout<<"swap前strb:"<<strb<<endl;swap(stra,strb);/*传入地址*/cout<<"swap后"<<endl;cout<<"stra:"<<stra<<endl;/*输出字符串*/cout<<"strb:"<<strb<<endl;return0;}


1.用指针传递参数,可以实现对实参进行改变的目的,是因为传递过来的是实参的地址.

2.引用作为函数参数进行传递时,实质上传递的是实参本身,即传递进来的不是实参的一个拷贝,因此对形参的修改其实是对实参的修改,所以在用引用进行参数传递时,不仅节约时间,而且可以节约空间。