例如,拿这个例子函数:
#include <stdlib.h>
#define MAX 100
typedef struct stack {
int sp;
int val [MAX];
} STACK;
void initStack (STACK *s){
s->sp = 0;
}
int push (STACK *s, int x){
if(s->sp == MAX) return -1;
else s->val[s->sp++] = x;
return 0;
}
int main(){
STACK s;
int pushval, p;
initStack(&s);
p = push(&s, 1);
pushval = s.val[s.sp-1];
printf("pushval %d\n", pushval);
return 0;
}
所以在这种情况下,如果我执行 s.val[s.sp],我会得到乱码。如果我执行 s.val[s.sp-1],我会得到压入堆栈的值。我不知道堆栈指针是否应该指向“下一个可用空间”也就是等于数组中元素的数量,或者应该等于数组最后一个元素的索引,也就是数组中元素的数量 - 1
最佳答案
这只是约定俗成的问题。许多实现让栈顶指针指向“下一个可用空间”,但只要您的栈在外部按预期运行,您就可以真正做自己喜欢的事。
关于c - 堆栈指针应该指向顶部的值,还是指向下一个值的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37701734/