C++ 在创建字符串的时候有个很奇怪的特点: 创建并初始化字符串数组和指针的时候,两者的const 属性并不一致,例如:
char ch[] ="abcde"; // ch 为非 const
char* ch2 = "abcde";// ch2 为 const
char *ch="abcde";
的方式,那么ch 指向的内存实际上是临时内存,为const 属性,是禁止写入的。
-----------------------------------------------------------------------------------------------------------------------------------
初始化的问题
char * ch = 'abcde';这样指向字符串文字量的,相当与const ch[5];是不能改变常量数组的内容的,
ch[4] = 'e'//error,给常量赋值,无意义
而char ch[5] = 'abcde';可以当普通数组使用,是可以修改的.ch [4] = 'e';//right,没错
-----------------------------------------------------------------------------------------------------------------------------------
char *ch//表示ch是一个指向字符串的指针,它可以指向字符串常量也可以指向字符串数组即字符数组 。
char ch[]//表示字符数组或字符串,且该数级的内容可以改变。前者可以指向后者,反之不可以
例子:
char *ch="abcd"//这里表示ch指向字符串常量,内容不可改,但ch还可以指向别的字符串。
char ch1[]="abcd"等价于char ch[]={'a','b','c','d','\0'}。注意这里的"abcd"不是常量
虽然ch,ch1同样可以表示指向字数串的指针(这样说不太准确),但ch=ch1可以,而ch1=ch不可以,因为数组名表示常量指针