鱼C论坛

 找回密码
 立即注册
查看: 1994|回复: 1

[已解决]去掉return还能得到正确答案???

[复制链接]
发表于 2023-4-25 13:33:40 | 显示全部楼层    本楼为最佳答案   
首先,我想澄清一下,你提到的两个代码片段中的第二个版本(没有return语句的版本)实际上是不正确的,它可能在某些编译器下偶然得到了正确的结果,但这不是一个可靠的行为。

问题1:去掉之后的运行逻辑和程序运行的每一步的动作是否一样呢?

答:不一样。去掉return后,你的peach函数不再返回任何值。在C语言中,不显式返回值的函数的行为是未定义的。这意味着编译器可能会产生不可预测的结果,这是因为没有显式地告诉它在函数返回时如何处理返回值。因此,去掉return后,程序运行的逻辑和每一步的动作是不一样的。

问题2:为什么有return的那个代码 第一次运行peach函数就会到return peach(day + 1, (num + 1) * 2); 这里不会返回这个函数的值到main函数里吗?

答:有return的代码在执行到return peach(day + 1, (num + 1) * 2)时,会递归地调用peach函数,一直到达基本情况(day == 10)。然后它开始返回值到上一层的调用,直到最后返回到main函数里。因此,有return的代码确实会将函数的值返回到main函数里。

在你的第二个代码片段中,由于没有显式返回值,编译器可能会偶然地使用寄存器中的值(这个值可能是由于之前的计算而存在的),从而导致在某些情况下得到正确的结果。然而,这并不是一个可靠的行为,你不能期望这个版本的代码在所有编译器和系统上都能正常工作。因此,建议始终在函数中显式地使用return语句来返回值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-4 02:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表