所以我正在尝试实现某种形式的堆栈。这是我在头文件中的定义:
struct tStack
{
int data;
struct tStack *dptr;
};
然后我有一个函数来初始化另一个文件中的堆栈,该文件名为:
int stack_init(struct tStack *top)
{
top = (struct tStack*)malloc(sizeof(struct tStack));
if (top == NULL)
{
return E_INTERN;
}
top->data = '#';
top->dptr = NULL;
return 0;
}
我在主文件中调用init函数,如下所示:
struct tStack *top = NULL;
int err = 0;
err = stack_init(top);
问题是堆栈不会被初始化,并且指向顶部的指针仍然为null。我认为问题出在传递指针方面,因为我不擅长指针:D
您的stack_init函数将指针复制到stack_init功能的本地,一旦stack_init完成,指针就不存在了。在stack_init函数的主体中,Top实际上不会为null。
你可以这样做:
struct tStack {
int data;
struct tStack *dptr;
};
int stack_init(struct tStack **top) {
*top = (struct tStack*)malloc(sizeof(struct tStack));
if (top == NULL)
{
return ERR;
}
(*top)->data = '#';
(*top)->dptr = NULL;
return 0;
}
int main() {
struct tStack *top = NULL;
int err = 0;
err = stack_init(&top);
}