在普通c中使用“struct”的问题

时间:2014-10-01 16:22:47

标签: c struct

我在这里遇到了一些问题。我创建了一个结构和一个函数来试图理解树数据结构是如何工作的。现在的问题是,当我尝试使用命令gcc test.c -o test编译以下代码时,编译器总是返回错误消息{{ 1}},请给我一些帮助。

error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token

2 个答案:

答案 0 :(得分:5)

正确的签名是:

void createTree(BiTree T)

而不是:

void createTree(BiTree &T)

如果事实,你不能使用&在C函数签名中。你这样做的方式在C ++中是有效的,它支持引用。 C不这样做。

您可以在签名中使用指针(例如createTree(BiTNode* T)),但在您的情况下不需要,因为您已经指定BiTree是指向BiTNode的指针。

重要更新:此更改将使您的函数编译,但为了使其工作,您还需要确保您可以实际使用在该函数内创建的指针。有两种方法可以做到这一点:

1)结果返回新指针:

BiTree createTree()
{
    BiTree T;
    int i;
    scanf("%d", &i);
    if(i == -1)
    {
        T = NULL;
    }
    else
    {
        T = (BiTNode *)malloc(sizeof(BiTNode));
        T->data = i;
        T->lchild = createTree();
        T->rchild = createTree();
    }
    return T;
}

int main(void)
{
    BiTNode* root = NULL;
    root = createTree();
    return 0;
}

2)将指向BiTree的指针作为函数参数(也许这就是你对引用的意义)。

void createTree(BiTree *T)
{
    int i;
    scanf("%d", &i);
    if(i == -1)
    {
        *T = NULL;
    }
    else
    {
        *T = (BiTNode *)malloc(sizeof(BiTNode));
        (*T)->data = i;
        createTree(&(*T)->lchild);
        createTree(&(*T)->rchild);
    }
}

int main(void)
{
    BiTNode* root = NULL;
    createTree(&root);
    return 0;
}

答案 1 :(得分:1)

你的功能

 void createTree(BiTree &T)

应该是

void createTree(BiTree *T)

void createTree(BiTree T)

您无法通过简单C中的C ++语法传递引用。