您的位置:首页 > 其它

由字符指针定义的字符串不可修改问题

2012-03-26 10:49 225 查看
老生常谈的问题,就当复习了....

问题引入:

#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";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: