用C语言模拟堆栈
请大家看一下下面的程序,帮我解决一个问题:
#define STACK_INIT_SIZE 5
#define STATCK_INCREMENT 5
#include <stdio.h>
struct stack
{ int *base;
int *top;
int stacksize;
};
void initstack(struct stack *s_init);
int push(struct stack *s_push,int e_push);
int pop(struct stack *s_pop,int e_pop);
main()
{ struct stack *st; //struct stack st;
int i,e;
initstack(st); //initstack(&st);
printf("\ninput:\n");
for(i=0;i<st->stacksize;i++) //for(i=0;i<st.stacksize;i++)
{ scanf("%d",&e);
push(st,e); //push(&st,e);
}
printf("\noutput\n");
for(i=0;i<st->stacksize;i++) //for(i=0;i<st.stacksize;i++)
printf("%d",pop(st,e)); //printf("%d",pop(&st,e));
}
void initstack(struct stack *s_init)
{ s_init->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
s_init->top=s_init->base;
s_init->stacksize=STACK_INIT_SIZE;
}
int push(struct stack *s_push,int e_push)
{ if(s_push->top==s_push->base+s_push->stacksize)
{ printf("overflow!");
return(0);
}
*s_push->top=e_push;
s_push->top++;
return(1);
}
int pop(struct stack *s_pop,int e_pop)
{ if(s_pop->top==s_pop->base)
{ printf("stack empty");
return(0);
}
s_pop->top--;
e_pop=*s_pop->top;
return(e_pop);
}
请问为什么定义成指针类型就不行,而定义成变量就可以。
请指出如何才能用指针????