如何为FIFO使用typedef结构?

时间:2016-10-29 21:22:39

标签: c struct typedef fifo

我刚开始用C语言为学校编程。我被要求做一个使用FIFO结构来解决数学问题的程序。我在互联网上获得了一个FIFO的代码,我只是不知道如何使用它。我尝试了很多东西,我在互联网上找不到任何有用的东西,也许我只是不知道正确的研究方法,但你可以帮助我吗?谢谢!

#include <stdio.h>
#include <stdlib.h>

typedef struct pile
{
    int donnee;
    struct pile *precedent;
} Pile;

void pile_push(Pile **p_pile, int donnee)
{
        Pile *p_nouveau = malloc(sizeof *p_nouveau);
        if (p_nouveau != NULL)
        {
                p_nouveau->donnee = donnee;
                p_nouveau->precedent = *p_pile;
                *p_pile = p_nouveau;
        }
}

int pile_pop(Pile **p_pile)
{
    int ret = -1;
    if (p_pile != NULL)
    {
        Pile *temporaire = (*p_pile)->precedent;
        ret = (*p_pile)->donnee;
        free(*p_pile), *p_pile = NULL;
        *p_pile = temporaire;
    }
    return ret;
}

void pile_clear(Pile **p_pile)
{
    while (*p_pile != NULL)
    {
        pile_pop(p_pile);
    }
}

我试过这样做:

int main()
{
    int return_val;
    Pile pile;
    pile_push(Pile, 5);
    return_val = pile_pop(Pile);
    printf(return_val);
}

并收到此错误:

expected expression before 'Pile'
too few arguments to function 'pile_push'

1 个答案:

答案 0 :(得分:1)

您混淆了Pilepile这是第一次警告的问题。函数期望指向指向桩的指针。即:它们更新指针的值,因此需要传递对指针的引用。你对printf的使用也是错误的。

int main()
{
    int return_val;
    Pile *pile = NULL;
    pile_push(&pile,5);
    return_val = pile_pop(&pile);
    printf("return_val is: %d\n",return_val);
}