我正在尝试创建一个堆栈,但是在启动它时遇到了问题。我拥有的代码是:
#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。我不太了解可能是因为指针了吗?
答案 0 :(得分:3)
您声明:
void initstk(stack *s1);
/*...*/
int main() {
stack s1;
但随后您以以下方式调用:
initstk(s1);
由于initstk
采用了指针参数,因此您应该传递s1的地址:
initstk(&s1);
我很惊讶您的编译器没有警告您不匹配。