码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-03-30 18:05:55      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:关于   log   http   一段   字符   信息   一个   开心   ref   

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

char str1[] = "abc":

      这里的"abc"是一个常量,首先会在常量存储区里存储"abc"这个常量,然后会因为"abc"被赋值给str1[],所以在栈中开辟一段内存,内存大小为4个节点(char数组后会自动加一个‘\0‘),然后又有一个"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 [] 的一点理解

标签:关于   log   http   一段   字符   信息   一个   开心   ref   

原文地址:https://www.cnblogs.com/strive-sun/p/12599995.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!