查找栈的增长方向的分析及C代码实现
对于栈这种数据结构,大家应该不会陌生,它是一种后进先出的数据结构。在一般的计算机中,栈存在着两种存放数据的方式,一种是向上增长的,一种是向下增长的,如图1所示。
vc/ypc9wpg0kpha+1nrnvdg1xchhkdbqo6zvu8rhz/ljz9t2s6s1xkosvltk/b7dqbbu06a1xlxy1rfqodpayv2+3uk21nomtcs12na3o7vu2s28mbxekgip1tcjrnw7ysfp8s/c1pazplxeo6y8tmr9vt1bttttprxetdjwt7tz09rk/b7dqrbu06a1xlxy1rehozwvcd4ncjxwpsthw7sjrm7sw8fu9dh5wlsy6b+0knfuusptw7pm0pip19s8usv5yrntw7xez7xns9bqtctvu7xe1pazple9z/k1vbxxyvtt2ste0rvw1styo78o16kjutxiysfo0sw8ylvu2s34yc+/tlw9tctsu7j2zsrm4qgjktwvcd4ncjxwps7sw8fwqrxao6zx986q0rvw1roj08o1xmr9vt294bm5o6zvu9b30qrtw9patoa3xbpm0plw0lxevtayv7hkwb+6zbqvyv21xmrkyouyzsr9oapex8o0o6zo0sphvs2/ydluyei8xtk7upazzndyo6zu2rpm0plw0m2ouf2xyl3pxlpsu7j2vtayv7hkwb+1xmewuvpbvbtotcs12na31rxatmxqts/vu7xe1pazple9z/kho8d708pv4rj2z+u3qlhg0lsz9sc0tcszzndyyofpwsv5yr6jujwvcd4ncjxwcmugy2xhc3m9"brush:java;">
/**********************************************************************
* 版权所有 (c)2015, zhou zhaoxiong。
*
* 文件名称:findstackdirection.c
* 文件标识:无
* 内容摘要:查看栈的增长方向
* 其它说明:无
* 当前版本:v1.0
* 作 者:zhou zhaoxiong
* 完成日期:20151202
*
**********************************************************************/
#include
我们可以看到,函数findstackdirection中出现了递归调用,即首次进入该函数的时候,将istackaddr变量(局部变量)的地址值赋给pstackaddr,第二次进入该函数的时候,用新的istackaddr变量的地址值与第一次进入该函数时istackaddr变量的地址值相比较,如果前者大于后者,那么说明栈增长方向是向上的,否则,说明栈增长方向是向下的。
将以上代码上传到linux机器上,使用“gcc -g -o findstackdirection findstackdirection.c”命令对程序进行编译之后,运行“findstackdirection”命令,结果如下:
stack grows down!
即我所使用的系统中的栈的增长方向是向下的。大家也可以将以上代码在自己的系统中运行一下,看看结果是什么。
在大部分人(包括我)的印象中,栈的增长方向只有一种,那就是向上(如图1中的(a)),但程序运行出来的结果与我们预期的恰恰相反。从这点也可以看出,计算机系统在设计上的精妙与复杂,里面有很多东西都值得我们细细研究的。
上一篇: 腊月有什么说法