对于栈这种数据结构,大家应该不会陌生,它是一种后进先出的数据结构,
查找栈的增长方向的分析及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变量的地址值相比较,如果前者大于后者,那么说明栈增长方向是向上的,否则,说明栈增长方向是向下的,
电脑资料
《查找栈的增长方向的分析及C代码实现》(http://meiwen.anslib.com)。将以上代码上传到Linux机器上,使用“gcc -g -o FindStackDirection FindStackDirection.c”命令对程序进行编译之后,运行“FindStackDirection”命令,结果如下:
Stack grows down!
即我所使用的系统中的栈的增长方向是向下的。大家也可以将以上代码在自己的系统中运行一下,看看结果是什么。
在大部分人(包括我)的印象中,栈的增长方向只有一种,那就是向上(如图1中的(a)),但程序运行出来的结果与我们预期的恰恰相反。从这点也可以看出,计算机系统在设计上的精妙与复杂,里面有很多东西都值得我们细细研究的。