重温C语言系列之二(函数的返回值)

本文探讨了函数返回值的原理,解释为何能正确返回局部变量的值,并通过实例展示了返回局部变量地址的风险。强调理解指针指向的重要性。

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

关于这个问题,大家应该在很多书上看到过:

1.函数的返回值不可以是局部变量;

2.函数内的局部变量在函数调用完成之后自动销毁,因为局部变量是存放于栈空间内的;

 

 理论很明确,但是实际应用中还是有一些疑惑的。先找几个常见的例子一步一步深入说明。

 

这个运行结果是什么? 按照上面的理论,我们返回一个局部变量,这个局部变量在函数调用完成后已被自动销毁,那返回值应该是乱值才对。但实际上运行结果是正确的。为什么?

      这个地方我曾经也很迷惑。因为有一个概念不清楚,所有不明白这什么这样可以。我们返回的是一个值 ,在返回值后我们将其赋给了变量C,相当于创建了一个副本,不论add()中的局部变量是否销毁都没有关系了。

      但是如果我们返回的是一个地址,指向局部变量的地址,就不行了。因为局部变量的地址在函数调用完成后销毁,我们返回的地址就指向的区域内就不是我们想要的值了,因为这块区域已是公共的,可被其它函数占用的,其内容是不定的。看如下例子:

 

在我的电脑上,编译时会提示warning message:

hello.c: In function ‘hello’:
hello.c:25: warning: function returns address of local variable

运行结果当然是一堆乱码了。

 

总结一句话:要时刻清楚你使用的指针指向哪里。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值