《深入理解c指针》关于char*数组的一点疑惑

img

如图,定义一个char*类型的数组title,后文说可以修改title数组的值。

img

但是我查了资料以后发现char*定义的字符串应该是常量,只读不写,所以title应该不能修改吧?

指针本身可以更改,更改的是自己指向的位置,至于指向的内容是否可以更改,还要看内容本身的类型
如果内容本身是常量,则不能修改。如果是变量,则可以修改
如:
char a = "123"; 这个a可以改, 但是a不能改
char a[5] = "123", a不可以改,但是*a可以改

下例使用了三个数组。第一个数组是用来存储书名列表的字符串数
组:
char *titles=ATale of TWO Cities”
Wuthering Heights”Don Quixote”
“Odyssey",“Moby-Dick”“Hamlet”
“Gulliver's Travels”
“畅销书 还有两个数组分别用来维护一个 列表和一个英文书列表

char* 可以改,但是char*指向的内容不可以改
比如 titles[0] = "HELLO"是可以的
但titles[0][0] = 'H'是不可以的

也就是说,char * p = "yes"这种形式,由于"yes"是常量,所以不能修改p串的内容
但是 char *titles[]是char * 数组,作为char * 这个指针本身不是常量,它指向的内容是常量