小初学者有关函数参数传递有关问题

小菜鸟求救有关函数参数传递问题
我写的程序如下所示,最后输出时x,y的值并没有交换呀,而注释里那种方法输出时x,y的值交换了,其中的原因还请详解,万分感谢。
#include<iostream.h>
void jiaohuan( int *a,int *b);
 main()
{
   int x=0,y=1;
  jiaohuan( &x,&y);
cout<<x<<y<<endl;
   return 0;
 
}
void jiaohuan( int *a,int *b)
{ int *temp;
  temp=a;
  a=b;
  b=temp;

/*void jiaohuan( int *a,int *b)
{ int temp;
  temp=*a;
  *a=*b;
  *b=temp;
}*/

------解决方案--------------------
a和b在函数内都是局部变量,*a和*b是把它们所指向的内容进行交换,所以你可以看到值的变化;
而a和b纯粹是指针的指向进行交换,局部变量出函数后没有任何意义。

引用:
我写的程序如下所示,最后输出时x,y的值并没有交换呀,而注释里那种方法输出时x,y的值交换了,其中的原因还请详解,万分感谢。
#include<iostream.h>
void jiaohuan( int *a,int *b);
 main()
{
   int x=0,y=1;
  jiaohuan( &x,&y);
cout<<x<<y<<endl;
   return 0;
 
}
void jiaohuan( int *a,int *b)
{ int *temp;
  temp=a;
  a=b;
  b=temp;

/*void jiaohuan( int *a,int *b)
{ int temp;
  temp=*a;
  *a=*b;
  *b=temp;
}*/

------解决方案--------------------
形参和实参的问题  另外指针也是一个数值
------解决方案--------------------
函数传入x,y地址时只是把他的地址值复制过来赋值给指针a、b,a、b是在堆空间,无论a、b怎么交换,最后都销毁,原来的x,y并不发生变化。
------解决方案--------------------
C所有参数都是值传递,不过可以用指针的值传递,来模拟引用传递。
C++除了引用参数,其他都是值传递。
void jiaohuan( int *a,int *b)//指针的值传递,来模拟引用传递,C交换函数的标准写法
{ int temp;
  temp=*a;//交换指针指向的对象,而不是指针,  *a=*b;
  *b=temp;
    //指针指向的对象的改变。会影响到那个对象本身
   //因为 当对象(变量)地址传递给参数时 *a,*b 就是实参地址中的数据。
 }
void jiaohuan( int *a,int *b)
{ int *temp;
  temp=a;
  a=b;
  b=temp;  
  //不作为返回值的话,指针的改变传不出去;
  //函数调用的值传递方式是单向传递,形参(指针)的值,是不会复制回去的。
  //而且变量的地址是常量表达式,是不会改变的。
  //交换指针的结果,只是在函数jiaohuan内部,临时让两个指针,交换了指向的对象。
  //不影响实参地址内部的对象的值,达不到交换的目的。


C++ 库定义的交换函数
大致如下: 

template<typename T>
void swap(T &a,T&b)//引用传递(也称地址传递)
{//引用参数,代表实参(所引用的对象)本身,所以交换后,实参就改变了。

     T t(a);
     a = b;
     b = t;  
}

------解决方案--------------------
这是指针变量和变量的指针问题,下面是我写的两个程序,看了后你会感悟一点:
#include "iostream.h"
int main()
{
   int i=3;
   int *iptr=&i;
   int **iptrptr=&iptr;//iptr也是变量,也能够获取它的地址
   cout <<"Address of Var i=" <<iptr <<endl;//输出iptr存储的内容,即i在内存中的地址
   cout <<"Data of Var i=" <<*iptr <<endl;//输出iptr所指向的变量
   cout <<"Address of Pointer iptr=" <<iptrptr <<endl;//输出iptr在内存中的地址
   cout <<"Address of Var i=" <<*iptrptr <<endl;//输出iptrptr所指向的变量,即iptr
   *iptr=2+*iptr;//*iptr可以作左值
   cout <<"Data of Var i=" <<*iptr <<endl;
   return 0;
}









#include<iostream>
using namespace std;
int main(){
int a=1;
const int *p=&a;
int b=2;
p=&b;
cout<<p<<endl;;  //输出b的地址
cout<<*p;      //这是输出的就是b的值
return 0;
}