这个我不大理解的是,在当d=10时,它返回d给上一层的i,可是当执行了“i=digui(d)”后,然后怎么搞呢?是编译器自己默认自己return吗?它把谁的值return呢?(根据编译结果知道是把i的值return是吧,可是问题在后面呢?) 在当我在递归函数后面加上“printf("i=%d i is address=%d\n",i,&i); ”这句代码时编译结果完全不同了,下面是截图: 当d=10时,它返回d给上一层的i,于是执行了“printf("i=%d i is address=%d\n",i,&i); ”这句代码,结果是i=10,然后就又是上一层的i了,又执行“printf("i=%d i is address=%d\n",i,&i); ”这句代码,可是结果是i=29。就这样直到栈的清空。为什么会出现这样的结果?多加了一句貌似与程序无关的代码,却使程序的结果发生了重大变化。 最后当我在程序的又加了句“return(i); ”这样使程序的结果又回到了以前我所预料到的情况。下面是截图: 这上面的问题我实在是搞不大懂,希望大神指点一下。 谢谢!! 递归 return 变量 [解决办法] 有那么复杂吗?把你不懂的说的尽可能简单一点 [解决办法] 我问你个问题,比如这个函数
从这里可以看出,return语句其实就是把需要return的值压入eax中,然后到调用的地方读取这个值。 因为printf本身也是一个函数调用嘛,所以你可以猜测下,调用了printf后eax的值改变了,应该是printf返回了一个值。写一句c=printf("i=%d\n i is address=%d\n",i,&i); 然后printf("%d\n",c);看看就知道了。结果可以看出,c的值就是你返回给i值。