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