📄 subject_25752.htm
字号:
<p>
序号:25752 发表者:Zerg 发表日期:2002-12-25 14:31:54
<br>主题:????????递归函数的参数 -- 与 -1 的区别?????????????
<br>内容:????????递归函数的参数 -- 与 -1 的区别?????????????<BR>//完全用为了用VC++ Debugger而写的代码:<BR><BR><BR>int Factorial( int iCurrentValue );<BR><BR>void main ( void )<BR>{<BR> int iRecursiveCalculation;<BR><BR> iRecursiveCalculation = Factorial( 4 );<BR>}<BR><BR>int Factorial( int iCurrentValue )<BR>{<BR> if( iCurrentValue == 1 )<BR> return iCurrentValue;<BR> else<BR> return iCurrentValue *= <BR> Factorial( iCurrentValue -- ); // -- 与 -1 的确不同<BR>} //用--运行出错<BR>// 用 -- Disassembly:<BR><BR>00401093 8B 45 08 mov eax,dword ptr [ebp+8]<BR>00401096 89 45 FC mov dword ptr [ebp-4],eax<BR>00401099 8B 4D FC mov ecx,dword ptr [ebp-4]<BR>0040109C 51 push ecx //问题所在<BR>0040109D 8B 55 08 mov edx,dword ptr [ebp+8]<BR>004010A0 83 EA 01 sub edx,1<BR>004010A3 89 55 08 mov dword ptr [ebp+8],edx<BR>004010A6 E8 5A FF FF FF call @ILT+0(Factorial) (00401005)<BR><BR>// 用 -1 Disassembly:<BR><BR>00401093 8B 45 08 mov eax,dword ptr [ebp+8]<BR>00401096 83 E8 01 sub eax,1<BR>00401099 50 push eax <BR>0040109A E8 66 FF FF FF call @ILT+0(Factorial) (00401005)<BR><BR>从反汇编的角度可以理解:-- Disassembly中用了ecx来入栈,又把edx减1。(不知为何??????)<BR><BR> 不知怎样用C++的方法去理解(比如:优先级,形参......),<BR> 或者在<<C++ primer>>,<<The C++ Programming Language>>中<BR> 那一部分可以找到答案。<BR> 谢谢了!!!!!!!!!!!!!!<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:凯凯 回复日期:2002-12-25 17:29:57
<br>内容:--是用了再减一,也就是给Factorial的参数并没有被减一,是Factorial被调用后才减一。<BR>-1就是直接将iCurrentValue减一后再调用Factorial。当然不同了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Zerg 回复日期:2002-12-25 20:49:20
<br>内容:大哥:<BR> 首先谢谢!!<BR> 能否告诉一下mov eax,dword ptr [ebp+8]中[ebp+8]<BR> 以及 mov ecx,dword ptr [ebp-4]中[ebp-4]是什么<BR> 意思。(我只知道是DWORD类型指针ptr)<BR><BR> mov eax,dword ptr [ebp+8]<BR> mov dword ptr [ebp-4],eax<BR> mov ecx,dword ptr [ebp-4]<BR> push ecx //问题所在<BR> mov edx,dword ptr [ebp+8]<BR> sub edx,1<BR> mov dword ptr [ebp+8],edx<BR> call @ILT+0(Factorial) (00401005)<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -