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

本文探讨了C语言中从函数返回字符串的不同方式及其潜在的问题。包括直接返回局部数组、返回指向静态存储区的指针以及使用static关键字来改变变量的存储位置等方法,并解释了每种方法的工作原理和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值