#include <stdio.h> //第一行
int main() //第二行
{ //第三行
char* a = "I am a teacher."; //第四行
*a = 'v'; //第五行
char b[] = "I am a teacher."; //第六行
char* p=b; //第七行
*p = 'v'; //第八行
printf("%s\n", a);
printf("%s\n", b);
return 0;
}
第五行是错误的,因为字符指针变量a指向字符串常量"I am a teacher."的第一个字符,字符串常量是不能改变的。
但是第八行,同样写法是给字符指针变量赋值,为什么第五行错,而第八行却是对的呢?第八行和第五行的格式一样啊,左边都是字符指针变量a(第五行)和p第八行。
第五行错误的原因是变量a指向一个常量字符串,赋值a是更改常量字符串的内容,所以错误。
第八行的b是在声明定义时,使用常量字符串初始化字符数组变量b,所以变量p指向的是b数组中的第一个元素,属于变量存储区域,所以赋值p是正确的。
*p指向b,b是变量,变量是可修改的。
b是字符数组,它保存的字符串是字符串变量,可以被修改,也就是可以赋值。指针p只是指向了b的地址,不会改变b内存可修改的特性。