C-无法在我的程序中启动堆栈

时间:2019-02-05 02:10:56

标签: c arrays struct stack typedef

我正在尝试创建一个堆栈,但是在启动它时遇到了问题。我拥有的代码是:

#define LINELN 72    
#define STACKSZ 25    
#define NEWLN '\n'    
#include <stdlib.h>    
#include <stdio.h>  

// interface struct for stack
typedef struct stack {    
  char data[STACKSZ];    
  int top;    
} stack;    

void initstk(stack *s1);    
int emptystk(stack s);    

int main() {
  stack s1;
  initstk(s1);
  printf("%d",emptystk(s1)); 
  exit(0);
}

void initstk(stack *s1) {
  s1->top=-1;
}

int emptystk(stack s) {
  if(s.top == -1){
    return 1;
  }
  else{
    return 0;
  }
}    

我希望它打印出1,因为堆栈是空的,但是它仍然打印出0。我不太了解可能是因为指针了吗?

1 个答案:

答案 0 :(得分:3)

您声明:

void initstk(stack *s1);
/*...*/
int main() {
stack s1;

但随后您以以下方式调用:

initstk(s1);

由于initstk采用了指针参数,因此您应该传递s1的地址:

initstk(&s1);

我很惊讶您的编译器没有警告您不匹配。