关于char * 和 char [] 的一点理解

Posted strive-sun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于char * 和 char [] 的一点理解相关的知识,希望对你有一定的参考价值。

截取一段有用的信息: c++的char[]和char*的区别

char str1[] = "abc":

      这里的"abc"是一个常量,首先会在常量存储区里存储"abc"这个常量,然后会因为"abc"被赋值给str1[],所以在栈中开辟一段内存,内存大小为4个节点(char数组后会自动加一个‘‘),然后又有一个"abc"被保存在栈中。

const char *str2 = "abc":

      因为"abc"在常量存储区中保存有一份(即使没保存,这样的操作也会新建一份),这里str5定义的时候,嘿,我见过这个,str2就可以开心的直接指向"abc"所在的常量区的地址。

 

来点有用的,

str2所指向的abc在常量存储区,任何指向该存储器的任何写操作都是非法的。

打个比方: *str2++ = ‘d‘ , 这样写是是非法的,无法编译成功

而str1[0] = ‘d‘是合法的,因为str1将文字字符串放入只读内存中,并将该字符串复制到堆栈上新分配的内存中。

补充知识:

str2的指针可以任意改变,str2 = str1; 这样是OK的, str2的指针地址就是str1的地址了

 

以上是关于关于char * 和 char [] 的一点理解的主要内容,如果未能解决你的问题,请参考以下文章

关于java中String的一点理解

0115关于索引认识

关于char*, char[], string的理解

关于char*, char[], string的理解

个人理解的int数组和char数组

char * 和 char[] 的区别 [重复]