为什么会是40啊?有大佬解析一下吗
f函数中的x是值传递,保存在栈中,在f函数中即使改动了x的值,在返回的时候还是原来的值,因为只改变了栈的数值。
而a是引用传递,本质是传递了指针,在f函数中改动a会连带改动main中a的位置的参数,也就是x。
因此结果是6*6-1+5=40。等会画个图。
随手画的几个辅助理解的图,手写的,字不清楚见谅
开始调用的状况
执行第一个x=x*x-1时
执行a=x+a时
结果返回的时候,main中的就变成40。
@计算机知识杂谈: 感谢感谢!我看明白了 辛苦你了!
是这样吗?
6 * 6 -1 = 35
5 + 35
=40
第二个值传引用, 实际上a就是外层的x
@人间春风意: 谢谢
f函数的x是值传递,不会改变main中的x的值
f函数的x=6,a=5
因此最终 6*6-1+5=40
感谢!
多把定义拿来看看。
函数的参数传递有两种方式,一种是值传递,一种是引用传递。
值传递将值给参数(变量),引用传递以前地址的方式传给参数(变量)
你再想想 调用的 栈空间开辟图像。你可以先不看这么复杂的,先看一下 f(int x,int &y){ x=5,y=5)} 再打外面的值来看看。
好的 感谢!
这种题目故意引导你的,实际写项目时一般参数都是对应的,x对应x,y对应y,它这个传到函数里,实际上x已经不是原来的x了,而 a才是原来的x,a是引用的,a是多少就是x是多少
感谢!