• 《C语言知识点 —— 字符串指针和字符串数组的区别》


      看一个例子:

    #include <stdio.h>
    
    int main()
    {
      char *pstr1 = "this is a test";
      char pstr2[] = "this is a test";
    
      sprintf(pstr1, "1"); 
      sprintf(pstr2, "2");   
                  
      return 0;  
    }
    

      上面的例子,一开始会打印段错误。然后把sprintf(pstr1, "1");屏蔽了。会打印2。

    区别:

      char *pstr1 = "this is a test";
      char pstr2[] = "this is a test";
    

      在上述声明中,pstr2是一个仅仅足以存放初始化字符串以及空字符''的一维数组。数组中的单个字符可以进行修改,但pstr2始终指向同一个存储位置。

      pstr1是一个指针,其初值指向一个字符串常量。不能通过该地址去修改该字符串常量。之后它可以被修改以指向其他地址。

      

      假如本来存放"this is a test"这个字符串常量的地址是0x100000f33。

    *pstr1 = “11111”;
    

      现在通过寻址符去访问该地址等价于*0x100000f33。然后要去改变地址中的字符串常量。这个是不被允许的,因为字符串常量是只读。

      

      那么为什么数组可以呢?

      字符串一旦被创建就存在于常量池中。

      以字符数组形式创建的字符串,实际上是从字符串常量池中复制了一个副本,所以修改字符数组的内容时,只是修改的自己的副本,并不会影响到常量池中的字符串。而对字符串指针strp操作时会影响到常量池中的字符串

  • 相关阅读:
    GLSL
    c++ 的垃圾收集(garbage collector
    ZZ 红黑树,并非想象中的那么复杂
    【转载】我心目中的android机器档次
    代码优化
    qqww
    solve Ax+By+C=0
    the c10k problem
    标 题: 腾讯面试题目(PHP程序员)
    zz 软件开发流程工具一览
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/13858499.html
Copyright © 2020-2023  润新知