截取一段有用的信息: 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
时间: 2024-10-14 19:21:21