## 关于C/C++中函数形参传递问题

关于C/C++中函数形参传递问题

关于C/C++中函数形参的传递,我们可能已经知道,形参是从右往左传递形参入栈的。
而在今天的小白在编程实验中遇到了一个问题,无论是从左往右还是从右往左,传入的结果都相同。
下面是图示说明:
在这里插入图片描述在这里插入图片描述这是一个将二进制数转换为十进制数的递归函数:具有四个形式参数:
i(2的指数位),num(待转换的二进制数),p(待转换的位数),sum(代表将转换的十进制数)。
比如传入12,它将先12与10取余,余为2,再用2来乘上2的0次得到二进制个位代表的十进制值。
然后将i(2的指数位)加1后传入,将12/10=1的值传入,p(待转换的位数)减1传入,最后将个位数代表的十进制值传入。
而我发现无论是将 i 的值在左边还是右边 pow函数中必须减一,但是实际上第一次我传入的i值是0,如果这样的话岂不是变成了 2^(-1),即第一次计算为12%10=2; 2*2^(-1)=1;结果为1,这是不符合实际的。
但是结果却如下图所示:
在这里插入图片描述
因为函数传递时,先一次从右往左传递值完成后才会调用形参中调用的函数,也就是说,当我第一次执行pow(2,i-1)时,实际上是在执行完 ++i 的基础上进行的!
所以可以得出结论:当函数形参传递时有调用函数情形,会先依次从右往左执行完形参的传递,再调用函数。

猜你喜欢

转载自blog.csdn.net/ArrayChen1999/article/details/82810718