⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_25752.htm

📁 一些关于vc的问答
💻 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>&nbsp;&nbsp;int iRecursiveCalculation;<BR><BR>&nbsp;&nbsp;iRecursiveCalculation = Factorial( 4 );<BR>}<BR><BR>int Factorial( int iCurrentValue )<BR>{<BR>&nbsp;&nbsp;if( iCurrentValue == 1 )<BR>&nbsp;&nbsp;&nbsp;&nbsp;return iCurrentValue;<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;return iCurrentValue *= <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Factorial( iCurrentValue -- );&nbsp;&nbsp;// -- 与 -1 的确不同<BR>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用--运行出错<BR>// 用&nbsp;&nbsp;--&nbsp;&nbsp;Disassembly:<BR><BR>00401093 8B 45 08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax,dword ptr [ebp+8]<BR>00401096 89 45 FC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dword ptr [ebp-4],eax<BR>00401099 8B 4D FC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx,dword ptr [ebp-4]<BR>0040109C 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ecx&nbsp;&nbsp; //问题所在<BR>0040109D 8B 55 08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx,dword ptr [ebp+8]<BR>004010A0 83 EA 01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx,1<BR>004010A3 89 55 08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dword ptr [ebp+8],edx<BR>004010A6 E8 5A FF FF FF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ILT+0(Factorial) (00401005)<BR><BR>// 用&nbsp;&nbsp;-1&nbsp;&nbsp;Disassembly:<BR><BR>00401093 8B 45 08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax,dword ptr [ebp+8]<BR>00401096 83 E8 01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax,1<BR>00401099 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>0040109A E8 66 FF FF FF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ILT+0(Factorial) (00401005)<BR><BR>从反汇编的角度可以理解:--&nbsp;&nbsp;Disassembly中用了ecx来入栈,又把edx减1。(不知为何??????)<BR><BR> 不知怎样用C++的方法去理解(比如:优先级,形参......),<BR> 或者在&lt;&lt;C++ primer&gt;&gt;,&lt;&lt;The C++ Programming Language&gt;&gt;中<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>&nbsp;&nbsp;首先谢谢!!<BR>&nbsp;&nbsp;能否告诉一下mov eax,dword ptr [ebp+8]中[ebp+8]<BR>&nbsp;&nbsp;以及 mov ecx,dword ptr [ebp-4]中[ebp-4]是什么<BR>&nbsp;&nbsp;意思。(我只知道是DWORD类型指针ptr)<BR><BR> mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax,dword ptr [ebp+8]<BR> mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dword ptr [ebp-4],eax<BR> mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx,dword ptr [ebp-4]<BR> push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ecx&nbsp;&nbsp; //问题所在<BR> mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx,dword ptr [ebp+8]<BR> sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx,1<BR> mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dword ptr [ebp+8],edx<BR> call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@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 + -