要想将变量传入函数当做函数的参数并且改变他的值,那么就必须传入这个变量的指针,如果只转入它本身,那么实际传入函数的是变量的复制,改变这个变量的复制是无法改变他本身的,例如这里的初始化函数int InitStack(sqStack *s),如果声明变量sqStack *s,然后调用InitStack(s),s是不变的,也就没有对应的内存空间,可以声明sqStack s,调用InitStack(&s),也可以声明sqStack* s,调用InitStack(&s),例如:
#include <stdio.h>
#include <stdlib.h>
#define Stack_Size 100
#define ok 1
#define ERROR 0
typedef struct Stack
{
int elem[Stack_Size];
int top;
}sqStack;
int InitStack(sqStack **s)//初始化
{
if((*s=(sqStack*)malloc(sizeof(sqStack)))==NULL)
return ERROR;
(*s)->top=-1;
return ok;
}
int Push(sqStack *s,int e)//入栈
{
if(s->top>=Stack_Size-1)
return ERROR;
else
{
s->top++;
s->elem[s->top]=e;
return ok;
}
}
int Pop(sqStack *s,int *e)//出战
{
if(s->top<0)
return ERROR;
else
{
*e=s->elem[s->top];
s->top--;
return ok;
}
}
int StackEmpty(sqStack *s)//判断栈空
{
if(s->top==-1)
return ok;
else
return ERROR;
}
main()
{
sqStack *s;
int ch,x;
InitStack(&s);
ch=getchar();
while(ch!='\n')
{
Push(s,ch);
ch=getchar();
}
while(!StackEmpty(s))
{
Pop(s,&x);
printf("%c",x);
}
printf("\n");
}