1、交换变量x和y的值
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
cout<<"swap:x="<<x<<",y="<<y<<endl;
}

int a=5;int b=10;
int x=1;int y=2;
void swap(int x,int y){
int temp;
temp=x;
x=y;
y=temp;
cout<<"swap:x="<<x<<",y="<<y<<endl;
}
void main(){
swap(a,b);
cout<<"swap:a="<<a<<",b="<<b<<endl;
cout<<"swap:x=============="<<x<<",y="<<y<<endl;
}

此处Swap函数无法影响实参本身,执行swap时,只交换了其实参的局部副本,而传递给swap的实参并没有改变。所以最后输出的x,y值认为1,2。
2、交换变量a和b的值
void swap(int & x,int & y)
{
int temp;
temp=x;
x=y;
y=temp;
cout<<"swap:x="<<x<<",y="<<y<<endl;
}

int a=5;int b=10;
int &x=a;int &y=b;//x是a的一个引用,y是b的一个引用,即别名
void swap(int &x,int &y){
int temp;
temp=x;
x=y;
y=temp;
cout<<"swap:x="<<x<<",y="<<y<<endl;
}
void main(){
swap(a,b);
cout<<"swap:a="<<a<<",b="<<b<<endl;
}

引用的一些规则如下:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
3、交换变量*x和*y的值
void swap(int * x,int * y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
cout<<"swap:x="<<*x<<",y="<<*y<<endl;
}

int a=5;int b=10;
int *x=&a;int *y=&b;//指针引用
void swap(int *x,int *y){
int temp;
temp=*x;
*x=*y;
*y=temp;
cout<<"swap:*x="<<*x<<",*y="<<*y<<endl;
cout<<"swap:x"<<x<<",y="<<y<<endl;
}
void main(){
cout<<"swap:a="<<a<<",b="<<b<<endl;
cout<<"swap:*x="<<*x<<",*y="<<*y<<endl;
swap(&a,&b);
cout<<"swap:a="<<a<<",b="<<b<<endl;
cout<<"swap:x"<<x<<",y="<<y<<endl;
cout<<"swap:*x="<<*x<<",*y="<<*y<<endl;
}

调用swap后,x仍指向a,y仍指向b。
4、交换变量x和y的值
void swap(int * x,int * y)
{
int * temp;
temp=x;
x=y;
y=temp;
cout<<"swap:x="<<*x<<",y="<<*y<<endl;
}

int a=5;int b=10;
int *x=&a;int *y=&b;//指针引用
void swap(int *x,int *y){
int *temp;
temp=x;
x=y;
y=temp;
cout<<"swap:*x="<<*x<<",*y="<<*y<<endl;
cout<<"swap:x"<<x<<",y="<<y<<endl;
}
void main(){
cout<<"swap:a="<<a<<",b="<<b<<endl;
cout<<"swap:*x="<<*x<<",*y="<<*y<<endl;
swap(&a,&b);
cout<<"swap:a="<<a<<",b="<<b<<endl;
cout<<"swap:x"<<x<<",y="<<y<<endl;
cout<<"swap:*x="<<*x<<",*y="<<*y<<endl;
}

Swap函数中改变了指针的指向。