有关使用指针做交换函数的有关问题

有关使用指针做交换函数的问题
我写了一个函数用来交换x,   y的值,传入的是指针
如下
void   swap   (char   *x,   char   *y)   {

char   *temp   =   NULL;
*temp   =   *x;
*y   =   *x;
*x   =   *temp;

}

运行就出错

但是改为
void   swap   (char   *x,   char   *y)   {

char   *temp   =   x;
*y   =   *x;
*x   =   *temp;

}
就可以正常运行了,结果也对

不知道是为什么,是不是指针在编译时这两种写法会造成不同的结果呢?

PS:VC6.0环境

------解决方案--------------------
你让temp指向空,*temp就没有意义了!
看来楼主对指针的理解还需要加强啊