我正在尝试实现一个堆栈,但我不理解使用不透明指针。这是我的声明:
/* 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时编译错误。我做错了什么?
答案 0 :(得分:3)
您要返回stack_t
作为值,但stack_new
函数的返回类型为stack
,即typedef struct stack_t* stack
。
您需要返回指针 - 使用stack_t
将malloc
的分配从堆栈更改为堆,以进行动态分配。
1}}当不再需要时,不记得堆栈,因为它现在是动态分配的。
free()