请问,指针 为什么 没有改变内存的值

请教,指针 为什么 没有改变内存的值?
#include<iostream.h>

change(char* p)
{
cout<<"p="<<p<<endl;
p="zhang";
cout<<p<<endl;
}
void main()
{
char* a="dian";

change(a);
cout<<a<<endl; //why?
}

为什么 cout<<a<<endl; //why?
这行打印出来的是 dian,而不是zhang。
我在change函数里已经把a的值通过指针传递改成zhang了,
为什么最后打印出来的还是dian?

------解决方案--------------------
实参是形参的一个副本,修改这个副本不影响实参.
------解决方案--------------------
C/C++ code
#include <iostream> 
#include <cstring>
using namespace std;
int change(char* p) 
{ 
    cout <<"p=" <<p <<endl; 
    strcpy(p, "zhang"); 
    cout <<p <<endl; 
    return 1;
} 
int main() 
{ 
    char a[32]="dian"; 
    change(a); 
    cout <<a <<endl; //看现在的代码,自己分析...另外不要写不伦不类的C++代码了
    return 0;
}

------解决方案--------------------
这样就可以修改外面的指针了:
C/C++ code

void change(char** p) 
{ 
    cout <<"*p=" <<*p <<endl; 
    *p="zhang"; 
    cout <<*p <<endl; 
} 
void main() 
{ 
    char* a="dian"; 
    
    change(&a); 
    cout <<a <<endl; //why? 
}

------解决方案--------------------
探讨
实参是形参的一个副本,修改这个副本不影响实参.