char* strA() {
char str[] = "hello world";
return str;
}
这里char str[] = "hello world"分配的是一个局部数组,当函数调用完成,str就无意义了。另外局部数组是局部变量,放在栈中,数据是可以修改的,如str[0] = 't'。
若定义char* str = "hello world"则分配的是一个全局数组,对应内存中的全局区域。字符串常量保存在只读的数据段,所以这个定义还有问题,用最新的g++编译会有warning,应该const char* str = "hello world"来说明我不会修改它。因而对其数据的修改如*std = 't'是不可以的。
本文探讨了字符串在不同存储区域的行为:局部数组与全局数组的区别、数据段的特点及如何正确声明不可变字符串。通过示例代码解释了局部数组和全局数组的内存分配位置及其可修改性。
2971

被折叠的 条评论
为什么被折叠?



