分类: C/C++
2009-09-27 11:07:45
#include “iostream.h” int a=5; int *example1(int b) { a+=b; return &a; } int *example2(int b) { int c=5; b+=c; return &b; } void main() { int *a1=example1(10); int *b1=example2(10); cout <<”a1=”<<*a1< cout <<”b1=”<<*b1< } 输出结果: a1=15 b1=4135 |
example1(): push bp;入栈 mov bp,sp mov ax,[bp+04];传递参数 add [00AA],ax;相加 mov ax,00AA ;返回了结果所在的地址 . . . pop bp;恢复栈,出栈 ret;退出函数 example2(): push bp;入栈 mov bp,sp sub sp,02 mov word ptr [bp-02],0005 mov ax,[bp-02];传递参数 add [bp+04],ax;相加 lea ax,[bp+04];问题就出在这里 . . . mov sp,bp pop bp;恢复栈,出栈 ret;退出函数 |