代码:
char * name = "hello world";//“hello world”是一个常量字符串,name指向这个字符串
printf("char * name addr=%p, val=%s\n", name, name);
name = "nihao";//将另外一个常量字符串“nihao"的地址赋值给name
//strcpy(name,"nihao");//试图修改常量字符串“hello world”的值 err
printf("char * name addr=%p, val=%s\n", name, name);
char * name2 = NULL;
//strcpy(name2,"nihao");//给空指针赋值 err
name2 = "nihao";
//name2也指向常量字符串“nihao”的地址, name2的地址等于name的地址
printf("char * name2 addr=%p, val=%s\n", name2, name2);
char name1[] = "hello world";//定义了一个字符串数组并赋值,该数组是一个局部变量
printf("char name1[] addr=%p, val=%s\n", name1, name1);
strcpy(name1,"nihao"); //给这个字符串数组从新赋值
//name1 = "nihao";//赋值方式错误err
printf("char name1[] addr=%p, val=%s\n", name1, name1);
for(int i=0; i < sizeof(name1); i++) name1[i] = 'A';//给字符数组每个元素赋值
printf("char name1[] addr=%p, val=%s\n", name1, name1);
char* name3 = name1; //定义一个字符串指针,指向字符数组name1
strcpy(name3,"nihao");
printf("char name3 addr=%p, val=%s\n", name3, name3);
//for(int i=0; i < sizeof(name1); i++) name3[i] = 'B';//给字符数组每个元素赋值
char* temp = name3;//指针自加操作会改变指针的值,需要保护一下,使用临时指针去操作
while(*temp) *(temp++) = 'B';
printf("char name3 addr=%p, val=%s\n", name3, name3);
name3 = "good";//name3指向新的字符串常量"good"
printf("char name3 addr=%p, val=%s\n", name3, name3);
结果: