最近在技术论坛上看到一个有趣的问题:如何判断计算机系统中栈的增长方向?先简单介绍一下这个问题的背景。栈的数据结构大家应该都不陌生了。它是一种后进先出的数据结构。据说在一般的计算机系统中,栈中存储数据的方式有两种,一种是向上增长,一种是向下增长,如图1所示。图1栈的两种增长方向在图1中(a)、栈向上增长,即数据A对应的地址小于数据B对应的地址;在图1(b)中,栈是向下增长的,即数据A对应的地址大于数据B对应的地址。那么,我们在使用的系统中如何判断栈的增长方向呢?我们知道,栈作为一种常用的数据结构,主要用来存放程序中的局部变量和函数的输入参数。那么,我们可以设计一个程序,通过前后两次比较某个局部变量的地址值来判断栈的增长方向。用这个思路写的程序如下:/****************************************************************************版权所有(C)2017,周肇雄。**文件名:FindStackDirection.c*文件标识:无*内容概要:确定栈的增长方向*其他说明:无*当前版本:V1.0*作者:周兆雄*完成日期:20170630*******************************************************************************/#include//函数声明voidFindStackDirection(void);/******************************************************************************函数说明:主函数*输入参数:无*输出参数:无*返回值:无*其他说明:无*修改日期,版本号,修改人,修改人内容*--------------------------------------------------*20170630V1.0ZhouZhaoxiongCreated***************************************************************************/intmain(){FindStackDirection();return0;}/*****************************************************************************函数说明:寻找栈的增长方向*输入参数:无*输出参数:无*返回值:无*其他说明:无*修改日期版本号修改人修改内容*----------------------------------------------------------------------------------*20170630V1.0ZhouZhaoxiong创建****************************************************************************/voidFindStackDirection(void){chariStackAddr=0;//用于获取栈地址staticchar*pStackAddr=NULL;//用于存储***iStackAddr的地址if(pStackAddr==NULL)//第一个入口{pStackAddr=&iStackAddr;//保存iStackAddr的地址FindStackDirection();//递归}else//第二个入口{if(&iStackAddr>pStackAddr)//第二个iStackDirection的地址大于第一个iStackDirection,则栈的增长方向是向上的{printf("Stackgrowsup!\n");}elseif(&iStackAddr