1️⃣字符串的恒定性: 指的是用指针方式定义的字符串.
为什么不能修改呢? 当我们以字符指针的形式将字符串数据存储到常量区的时候,并不是直接将字符串存储到常量区,而是先检查常量区中是 否有内容相同的字符串,如果有,直接将这个字符串的地址拿过来返回.如果没有,才会将这个字符串数据存储在常量区.
2️⃣指针定义的字符串的内容不能修改,但是指针本身指向的内容可以修改. 当我们重新为字符指针初始化一个字符串的时候,并不是修改原来的字符串,而是重新的创建了一个字符串. 把这个新的字符串的地址赋值给它.
*/
#include <stdio.h>
int main() { // 为什么不能修改呢? // 当我们以字符指针的形式将字符串数据存储到常量区的时候,并不是直接将字符串存储到常量区,而是先检查常量区中是 // 否有内容相同的字符串,如果有,直接将这个字符串的地址拿过来返回.如果没有,才会将这个字符串数据存储在常量区. char *name1 = "jack"; char *name2 = "jack"; char *name3 = "jack"; //我们会发现,打印的地址是一样的 printf("name1 = %p\n", name1); printf("name2 = %p\n", name2); printf("name3 = %p\n", name3);
// 指针定义的字符串的内容不能修改,但是指针本身指向的内容可以修改. name3 = "rose"; printf("name3 = %s\n",name3);
//name4和name123不存在复用现象,因为复用现象仅存在于用指针方式定义的字符串 char name4[] = "jack"; printf("name4 = %p\n", name4);
//下面做法是错误的,因为name4是数组名,代表数组内第一个元素的地址,是一个常量所以不能被修改. // name4 = "rose";
return 0; }
|