关于函数传值的问题!
这是我写的一个顺序栈,功能很简单只有,进栈和出栈代码如下:
程序代码:
#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为什么可以传过去呢?
我当时无意加上去的,结果却能通过,我想不通原理,求达人指教!