char *strA()
{
char str[] = "hello world";
return str;
}str[] = "hello world"//"hello world"常量字符串在内存中有两份拷贝,一份在动态分配的栈中,一份在静态存储区,str[]数组为函数内部局部变量,存储在栈上,在strA()函数退出时,栈要清空,局部变量的内存也被清空
char *strA()
{
char *str = "hello world";
return str;
}
char *str = "hello world"//一份拷贝,"hello world"是常量字符串存在静态数据区,把该字符串常量存在的静态数据区的首地址赋给指针str,所以strA()函数退出时,该字符串常量所在内存不会被回收,故能通过指针访问;
char *strA()
{
static char str[] = "hello world";//static变量被保存在静态存储区而不是堆栈,
return str;
}
此题参考《程序员面试宝典》
及http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183962.html
本文探讨了C语言中从函数返回字符串的不同方式及其潜在的问题。包括直接返回局部数组、返回指向静态存储区的指针以及使用static关键字来改变变量的存储位置等方法,并解释了每种方法的工作原理和注意事项。
515





