C - 指向int的指针以获取堆栈中的元素

1 c stack pointers casting

我想在C中编写标准堆栈,但我不确定我的stk_size()函数是否可以在除我的32位pc之外的其他平台上运行.我读到指向int的指针并不好.但是什么可以是更好的实施?我不想添加"大小"变量,因为它在我眼中是多余的.

以下是来源的一些部分:

  #define MAX_STACK_SIZE 100

    typedef struct stk stack;

    struct stk
    {
            /* Stack */
            int * stk;

            /* Pointer to first free element of stack */
            int * sp;
    };

    void stk_init(stack* s)
    {
            /* Allocate memory for stack */
            s->stk          = malloc(sizeof(s->stk) * MAX_STACK_SIZE);

            /* Set stack pointer to first free element of stack -> 0 */
            s->sp           = s->stk;
    }

    int stk_size(stack* s)
    {
            return ((int) s->sp - (int) s->stk) / sizeof(int *);
    }

    int main(int argc, char * argv[])
    {
            stack * s;
            stk_init(s);
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!

Cra*_*rks 9

你可以使用(s->sp - s->stk).减去指针会产生ptrdiff_t,这是一个带符号的整数类型.


Gru*_*rig 5

首先,你有一个错误.您没有为stack对象分配空间.你也想要

int main(int argc, char * argv[])
{
        stack s;
        stk_init(&s);
}
Run Code Online (Sandbox Code Playgroud)

要么

int main(int argc, char * argv[])
{
        stack * s = malloc(sizeof(stack));
        stk_init(s);
}
Run Code Online (Sandbox Code Playgroud)

至于你的问题,我看到@Crashworks在输入时已经回答了它.