函数返回指针

以前在《C语言程序设计-现代方法》这本书中看到过“永远不会返回指向自动局部变量的指针”这句话,当时并不在意,直到今天面试题中出现了返回局部变量的题后,才引起注意,真可惜!

面试代码如下:

char *test()
{
   //char p[]="Hello world";//方式1
   char *p="Hello world";//方式2

   return p;
}
 
请问上述两种方式是否有问题?
 
一开始以为两种方式都存在问题,不能正常返回指针。回来调试后发现,方式1中,以数组的形式分配内存(局部变量),内在会分配到函数栈上,当函数返回时,栈空间也随之释放了,因此无法正确返回指针的内容;方式2中,通过指针分配内存,字符串的内容会放到数据段中,即存放到堆中,因此,即使函数调用结束返回时,指针的内存仍未释放,因此可以正确返回指针的内容。
永不止步步 发表于02-28 15:18 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:382791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号