using namespace std;
int main(){
char * s1 = " lixiangfu " ;
char * s2 = s1;
cout << " " << " s1 " << " " << " s2 " << endl;
cout << " address: " <<& s1 << " " <<& s2 << endl;
cout << " value: " << s1 << " " << s2 << endl;
printf( " contain: %p %p " ,s1,s2);
s2 = " heyan " ;
cout << " /// " << endl;
cout << " " << " s1 " << " " << " s2 " << endl;
cout << " address: " <<& s1 << " " <<& s2 << endl;
cout << " value: " << s1 << " " << s2 << endl;
printf( " contain: %p %p " ,s1,s2);
getchar();
}
执行的结果是:
s1 s2
address: 0012ff7c 0012ff78
value: lixiangfu lixiangfu
contain 0046c0bc 0046c0bc
//
s1 s2
address: 0012ff7c 0012ff78
value: lixiangfu heyan
contain 0046c0bc 0046c046
可以看出:在s2=s1时,s2并没有复制字符串,而只是指向了“lixiangfu”的地址。
当执行s2=“heyan”时,s2就另外开辟的空间。
我猜想:char *p="abc"; p[0]='d' (wrong) 的原因了
就是几个变量都指向同一个字符川,修改了其中一个就必定会导致其他的变量的值也别修改
了,所以唯一的办法就是另外开辟空间存储新的字符川