c - 需要检查struct是否已经初始化

标签 c struct functional-programming queue

嗨,我正在制作一个队列抽象数据类型,我遇到了一个问题,我将尽力解释得尽可能清楚。 基本上我有两个结构,一个用于元素,一个用于队列(因此​​您可以初始化多个队列)。

struct element
{
    TYPE value;
    struct element* next;
};

struct queue
{
    struct element* head;
    struct element* tail;
    int element_counter;
};

我有一个函数可以初始化我的队列结构。

int make_new_queue(struct queue* name)
{
    name = malloc(sizeof(struct queue));
    name->head = NULL;
    name->tail = NULL;
    name->element_counter = 0;
}

我遇到的问题是让这段代码万无一失。例如,我在主函数中初始化了第一个队列。

struct queue* first = make_new_queue(first);

但是如果有人尝试在代码中间的某个地方再次做同样的事情,请写:

first = make_new_queue(first);

它会覆盖它并使头指针和尾指针为 NULL。我不明白的是如何使我的 make_new_queue 函数更好,并检查队列中是否有我提供的东西,但仍然让我初始化空队列。

抱歉我的英语不好。我希望你明白我想做什么。谢谢。

最佳答案

将其初始化为NULL并将指针传递给指针:

void make_new_queue(struct queue **name)
{
    if (*name != NULL) return; /* Yet initialized ? */
    *name = malloc(sizeof(struct queue));
    if (*name == NULL) {
        perror("malloc");
        exit(EXIT_FAILURE);
    }
    *name->head = NULL;
    *name->tail = NULL;
    *name->element_counter = 0;
}


struct queue *first = NULL;
make_new_queue(&first);

关于c - 需要检查struct是否已经初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906110/

相关文章:

c - 使用 fscanf 从文件中读取

c - 为什么函数会生成负数?

swift - Swift 中的结构数组

java - Java 8 中 Optional 类型的有效使用

syntax - [] 在 Perl 6 中使用匿名函数减少

将结构数据以表格格式保存到 Excel 文件的 C 程序

c - 将文本追加到现有的 UTF16LE 文件

c - 在 C 中,结构成员可以使用与类型相同的名称吗?

c - 如何创建信号量矩阵

functional-programming - Clojure:如何在运行时找出函数的数量?