第一次使用不透明指针

时间:2015-04-25 22:30:57

标签: c opaque-pointers

我正在尝试实现一个堆栈,但我不理解使用不透明指针。这是我的声明:

/* incomplete type */
typedef struct stack_t *stack;

/* create a new stack, have to call this first */
stack new_stack(void);

这是我的堆栈结构和new_stack函数:

struct stack_t {
    int count;
    struct node_t {
            void *data;
            struct node_t *next;
    } *head;
};

stack new_stack(void)
{
    struct stack_t new;
    new.count = 0;
    new.head->next = NULL;
    return new;
}

在我看来,我正在返回新堆栈的地址,但这会在返回new时编译错误。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您要返回stack_t作为值,但stack_new函数的返回类型为stack,即typedef struct stack_t* stack
您需要返回指针 - 使用stack_tmalloc的分配从堆栈更改为堆,以进行动态分配。

free()