现在的位置: 首页 > 综合 > 正文

char str[] = “hello world”;和char *str = “hello world”;区别

2013年10月22日 ⁄ 综合 ⁄ 共 540字 ⁄ 字号 评论关闭
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

http://hi.baidu.com/pasan/item/735c5d0bbee290e0fe240da7

抱歉!评论已关闭.