/********錯誤程序********/
void key(char *p)
{
?p="ac";
}

int main()
{
?char *p="d";
?cout<<p<<endl;
?key(p);
?cout<<p<<endl;
?delete p;
}
//該程序只輸出 "d"
/***********************/

/*******正確程序*******/
void key(char *p)
{
?strcpy(p,"ac");
}

int main()
{
?char *p=new char[5];
?strcpy(p,"e");
?cout<<p<<endl;
?key(p);
?cout<<p<<endl;
?delete[] p;
}
先輸出 "e",再輸出"ac"
/**********************/

==================================
第一個程序:
char *p="d";//p指向常量字符串
?cout<<p<<endl;
?key(char *p) //試圖改變p,語法無誤,但邏輯不允許,故編譯正確,運行錯誤。在程序編譯的時候; void key(char *p)類似被解釋成:void key(const char *p){p="ac";}

第二個程序:
char *p = new char[100];//p指向數組的首地址,內容可變
?strcpy(p, "d");//內容變為“d”
?cout<<p<<endl;
?key(p);//內容變為“ac”,strcpy()不改變它的地址,只改變p所指的數組的內容,故輸出為ac
C風格字串不支持直接賦值,要使用strcpy()。