首页 新闻 搜索 专区 学院

传值、传引用调用函数

1
[已解决问题] 解决于 2021-12-22 15:41

为什么会是40啊?有大佬解析一下吗

Siuly的主页 Siuly | 初学一级 | 园豆:146
提问于:2021-12-14 11:11
< >
分享
最佳答案
0

f函数中的x是值传递,保存在栈中,在f函数中即使改动了x的值,在返回的时候还是原来的值,因为只改变了栈的数值。
而a是引用传递,本质是传递了指针,在f函数中改动a会连带改动main中a的位置的参数,也就是x。
因此结果是6*6-1+5=40。等会画个图。

奖励园豆:5
计算机知识杂谈 | 菜鸟二级 |园豆:470 | 2021-12-15 20:47

随手画的几个辅助理解的图,手写的,字不清楚见谅
开始调用的状况

执行第一个x=x*x-1时

执行a=x+a时

结果返回的时候,main中的就变成40。

计算机知识杂谈 | 园豆:470 (菜鸟二级) | 2021-12-15 20:53

@计算机知识杂谈: 感谢感谢!我看明白了 辛苦你了!

Siuly | 园豆:146 (初学一级) | 2021-12-15 21:18
其他回答(4)
0

是这样吗?
6 * 6 -1 = 35
5 + 35
=40

人间春风意 | 园豆:1607 (小虾三级) | 2021-12-14 11:15

第二个值传引用, 实际上a就是外层的x

支持(0) 反对(0) 人间春风意 | 园豆:1607 (小虾三级) | 2021-12-14 11:16

@人间春风意: 谢谢

支持(0) 反对(0) Siuly | 园豆:146 (初学一级) | 2021-12-14 16:34
0

f函数的x是值传递,不会改变main中的x的值
f函数的x=6,a=5
因此最终 6*6-1+5=40

WmW | 园豆:280 (菜鸟二级) | 2021-12-14 12:18

感谢!

支持(0) 反对(0) Siuly | 园豆:146 (初学一级) | 2021-12-14 16:34
0

多把定义拿来看看。
函数的参数传递有两种方式,一种是值传递,一种是引用传递。
值传递将值给参数(变量),引用传递以前地址的方式传给参数(变量)

你再想想 调用的 栈空间开辟图像。你可以先不看这么复杂的,先看一下 f(int x,int &y){ x=5,y=5)} 再打外面的值来看看。

gw2010 | 园豆:1487 (小虾三级) | 2021-12-14 16:22

好的 感谢!

支持(0) 反对(0) Siuly | 园豆:146 (初学一级) | 2021-12-14 16:34
0

这种题目故意引导你的,实际写项目时一般参数都是对应的,x对应x,y对应y,它这个传到函数里,实际上x已经不是原来的x了,而 a才是原来的x,a是引用的,a是多少就是x是多少

jqw2009 | 园豆:2427 (老鸟四级) | 2021-12-15 09:04

感谢!

支持(0) 反对(0) Siuly | 园豆:146 (初学一级) | 2021-12-15 21:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册