关于函数传值的问题!
											这是我写的一个顺序栈,功能很简单只有,进栈和出栈代码如下:
程序代码:#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW 1
#define OK 1
#define ERROR 0
typedef int Status;
typedef int SElemType;
typedef struct{
  SElemType *base;
  SElemType *top;
  int stacksize;
}SqStack;
//构造一个空栈
Status InitStack(SqStack &S)
{
S.base=(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
//取栈顶元素
Status GetTop(SqStack &S,SElemType e)
{
if(S.base==S.top) return ERROR;
e=*(S.top-1);
return OK;
}
//进栈
Status Push(SqStack &S,SElemType &e)
{
if(S.top-S.base>=S.stacksize)
{S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
//出栈
Status Pop(SqStack &S,SElemType &e)
{
if(S.base==S.top) return ERROR;
e=*--S.top;
return OK;
}
//判断空栈
int stackempty(SqStack S)
{
if(S.base==S.top)  return 1;
else return 0;
}
//输出栈元素
void OutputStack(SqStack &S)
{
int e;
while(!stackempty(S))
{
Pop(S,e);
printf("%d  ",e);
}
}
//主函数
void main(){
int e=1;
SqStack S;
InitStack(S);
printf("请输入要入栈的元素(以0结束):\n");
while(e)
{
scanf("%d",&e);
if(!e) break;
Push(S,e);
}
printf("\n出栈:\n");
OutputStack(S);
}
问:当我调用OutputStack(S);
我想知道Pop()函数里的e是如何传入OutputStack()中,经printf("%d ",e);打印出来的。
不是函数结束后,空间立刻释放了,return也没有返回e,那e为什么可以传过去呢?
我当时无意加上去的,结果却能通过,我想不通原理,求达人指教!



											
	    

	


										
					
	
