c – const char * vs const char []

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

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

  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. const char* c1;
  6. const char* c2;
  7.  
  8. {
  9. const char* source1 = "Hello";
  10. c1 = source1;
  11.  
  12. const char source2[] = "Hi"; //isn't "Hi" in the same memory region as "Hello" ?
  13. c2 = source2;
  14. }
  15.  
  16. printf("c1 = %s\n",c1); // prints Hello
  17. printf("c2 = %s\n",c2); // prints garbage
  18.  
  19. return 0;
  20. }

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

解决方法

在此代码段中
  1. {
  2. const char* source1 = "Hello";
  3. c1 = source1;
  4.  
  5. const char source2[] = "Hi"; //isn't "Hi" in the same memory region as "Hello" ?
  6. c2 = source2;
  7. }

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

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

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

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