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;
} |
|