老生常谈的问题,就当复习了....
问题引入:
#include <iostream>
using namespace std;
int main()
{
char *str1 = "abcd";
cout << str1 << endl;
str1[0] = 'e';
cout << str1 << endl;
return 0;
}
注:编译没有问题,运行时出现问题。在C++中,如果用指针来援引字符串,比如: char *p="abcd"; 此时该字符串为常量,不可以用指针p进行修改,比如:p[0]='e'; 因为不可以修改常量值;如此定义字符数组道理是一样的,无非是多了几个常量指针,如:p[0]、p[1]、p[2]等,这些指针指向的字符串都是常量,不可以随意更改。如果你想可以修改的话,就需要定义成数组形式如: char p[]="abcd"; 此时的 p[0]='e'; 则是正确的。
至于*pt="abcde"; 是可以的,这里你首先要明白这几点:这里的*pt是一个指针,它里面存放地址,等价于pt[0]或者*(pt+0) ;另外,每一个字符串都是一个地址,这句话只是让*pt指针改变了指向,现在它指向了新的字符串"abcde";