c - 堆栈指针应该指向顶部的值,还是指向下一个值的位置?

标签 c arrays pointers stack

例如,拿这个例子函数:

#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/

相关文章:

c - 阻塞当前线程,类似于 getchar()

c - 函数返回指针数组后赋值

c - fork() 如何以及为什么会失败?

c - C 中重定向到输入/输出的语法 (UNIX)

java - 抽象数据类型 : Array of objects

c - 将值分配给动态分配的二维指针数组时出现语法错误

c++ - 试着自己实现一个双向链表;调用 afficheList() 两次我得到一个无限循环?

c++ - C++ 中的函数指针数组

javascript - 在数组中生成唯一的数字

c - 链接列表让我的大脑变得困惑。我应该怎么做?