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

截取一段有用的信息: 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的地址了

 

原文链接: https://www.cnblogs.com/strive-sun/p/12599995.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/377643

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月3日 下午1:37
下一篇 2023年3月3日 下午1:37

相关推荐