c – const char * vs const char []

前端之家收集整理的这篇文章主要介绍了c – const char * vs const char []前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
据我所知,像“Hello”这样的字符串文字

被认为是C中的char *和C中的const char *,对于这两种语言,字符串文字存储在只读存储器中.(如果我错了,请纠正我)

#include <stdio.h>

    int main(void)
    {
     const char* c1;
     const char* c2;

     {
      const char* source1 = "Hello";
      c1 = source1;

      const char source2[] = "Hi"; //isn't "Hi" in the same memory region as "Hello" ?
      c2 = source2;
     }

     printf("c1 = %s\n",c1); // prints Hello
     printf("c2 = %s\n",c2); // prints garbage

    return 0;
    }

为什么source1和source2的行为不同?(使用gcc -std = c11 -W -O3编译)

解决方法

在此代码段中
{
  const char* source1 = "Hello";
  c1 = source1;

  const char source2[] = "Hi"; //isn't "Hi" in the same memory region as "Hello" ?
  c2 = source2;
 }

source2是代码块的本地字符数组,在退出结束括号后的块时将被销毁.

至于字符文字,它有静态存储持续时间.因此,退出代码块后,指向字符串文字的指针将有效.字符串文字将与字符数组相对.

考虑到在C中字符串文字“Hello”的类型是char [6].这是任何字符串文字的类型是非const字符数组.不过你可能不会改变字符串文字.与C中的C相反,字符文字具有const字符数组的类型.

猜你在找的C&C++相关文章