首页 » PHP教程 » phpreturn变量技巧_三分钟弄懂C措辞的rreturn原来是这样返回局部变量的

phpreturn变量技巧_三分钟弄懂C措辞的rreturn原来是这样返回局部变量的

访客 2024-11-07 0

扫一扫用手机浏览

文章目录 [+]

在有返回值的函数中,return 语句的浸染是供应全体函数的返回值,并结束当前函数的实行。
在没有返回值的函数中也可以利用 return 语句,例如当检讨到一个缺点时提前结束当前函数的实行。
请看下面这个例子:

int add(int a, int b){ return a+b;}void print_log(double x){ if(x <= 0.0){ printf(\公众error\n\"大众); return;} printf(\公众log(x)=%f\n\"大众, log(x));}int main(){ int sum; sum = add(2,3); print_log(3.2); return 0;}

phpreturn变量技巧_三分钟弄懂C措辞的rreturn原来是这样返回局部变量的

对付 print_log 函数,它是 void 型,没有返回值,return 在这里起到提前结束的浸染。
由于我们要打印出 x 的对数值,以是 x 必须是个正数。
print_log 函数则对 x 的值做了判断,如果它不大于 0,则打印出 error,就直接返回 print_log 函数,并且返回到调用它的地方接着实行下一步了。

phpreturn变量技巧_三分钟弄懂C措辞的rreturn原来是这样返回局部变量的
(图片来自网络侵删)

而像 add 这样的有返回值的函数,return 则相称于定义一个和函数返回至类型相同的临时变量,并且用 return 之后的表达式进行初始化。
但是,这个临时变量比较分外,我们只是读一下它的值,读完了就开释了,而不能往里面存新的值,大略来说,便是函数返回值不能做左值,下面这么写就是非法的:

add(2,3)=4; // 造孽现在已经对 return 的用法理解了,但是还有一点点疑问

还记得上面这张图吗?在上一节(三分钟弄懂C措辞,局部变量为何只能在函数中利用,必须初始化吗)中,我们提到程序每调用一个函数,就会在栈区为其分配一块区域,所有局部变量都是在这块区域里存放的,函数实行完毕返回后,系统自动就将这块区域收回了。

这块区域较为正式的名字叫“栈帧”。

那么问题来了,既然函数的局部变量都存放在栈区,栈区在函数返回就开释了,那为什么 add 函数还能把局部变量返回呢?实在函数返回的并不是局部变量,而是局部变量里面存放的数据。

在前面一节中,我们用鞋柜来比喻局部变量,用鞋子来比喻数据。
我们想取出的是鞋子,而不是鞋柜,对吗?

事实上,在函数实行完毕后,系统会先将返回值暂存在寄存器 eax 里,以是纵然函数的栈帧被系统收回了,它的返回值依然在 eax 里保存的很好。
函数返回后,系统再把返回值从 eax 中取出,赋值给调用者。
请看下面这个例子:

#include <stdio.h>int fun(){ return 1;}int main(){ int ret; ret = fun(); return 0;}

我们查看它的汇编代码,创造统统和我们预见的同等:

欢迎在评论区一起谈论,质疑。
文章都是手打原创,每天最浅近的先容C措辞,喜好我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

标签:

相关文章

介绍白点控制之路,从原理到方法

白点,作为生活中常见的现象,无处不在。对于如何控制白点,许多人却感到困惑。本文将从原理出发,探讨白点的控制方法,并结合实际案例,为...

PHP教程 2025-01-03 阅读1 评论0

介绍直播王者,如何开启你的电竞直播之旅

随着电竞产业的蓬勃发展,越来越多的年轻人投身于电竞直播行业。王者荣耀作为一款备受欢迎的MOBA手游,吸引了大量玩家和观众。如何开启...

PHP教程 2025-01-03 阅读1 评论0