A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xuezhangjun 中级黑马   /  2016-11-13 20:39  /  1446 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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

2 个回复

倒序浏览
回复 使用道具 举报
谢谢大神
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马