:错误:在' struct'之前的预期表达式

时间:2015-10-18 19:17:54

标签: c linked-list malloc sizeof

我正在使用C中的链接列表进行实验,我收到的错误似乎无法动摇。该实验室将在2小时内到期,因此任何帮助都会令人惊叹!

这就是我对代码所拥有的:

void insert(int x, struct Node **pL)
{
    if(*pL == NULL){
        *pL = malloc(sizeOf(struct Node *pL)); // error here
        *pL->value = x; // error #2
        *pL->next = NULL;
    }else if(*pL != NULL){
        insert(x, &((*pL)->next));
    }
}

有什么想法吗?!!

这涵盖了该错误,但现在我收到的错误是,"错误:请求会员'价值'在不是结构或联合的东西中。

FINISHED!感谢所有帮助!

3 个答案:

答案 0 :(得分:1)

void insert(int x, struct Node **pL)
{

到目前为止,这告诉您获得指向指针的指针,如果需要,您的函数应该修改*pL的明确标志。

    if(*pL == NULL){
        *pL = malloc(sizeOf(struct Node *pL)); // error here

你试试这里,但语法错了。首先是sizeof,而不是sizeOf。 C区分大小写。然后,sizeof运算符将 类型表达式确定为其存储大小。因此,您可以撰写sizeof(struct Node)sizeof(**pL)。注意这里的 double 星号,你想要的是struct Node的存储大小,只有一个星号,你的表达式将是struct Node *类型(一个指针struct Node)。

        *pL->value = x; // error #2

这是错误的,因为->的优先级高于*,因此它意味着*(pL->value) = x;你想要什么,你想要(*pL)->value = x;

        *pL->next = NULL;
    }else if(*pL != NULL){

这一行没有多大意义(尽管不完全是错误)。 *pL NULL 可以是NULL。普通的else会在这里做。

        insert(x, &((*pL)->next));
    }
}

我真的很想知道为什么你在这个的最后一行得到了正确的括号,并且仍然没有看到错误在你自己上面的某些行?在这里添加:精确和尽责在编程中至关重要(在C语言中更是如此)。

总而言之,代码可能看起来像这样:

void insert(int x, struct Node **pL)
{
    if(*pL == NULL) {
        *pL = malloc(sizeof(struct Node));
        (*pL)->value = x;
        (*pL)->next = NULL;
    } else {
        insert(x, &((*pL)->next));
    }
}

答案 1 :(得分:0)

试试这个:

*pL = malloc(sizeof(*pL));

运营商为sizeof,而不是sizeOf

此外,struct Node *pL声明,将此传递给sizeof没有意义。 sizeof需要类型或变量。

答案 2 :(得分:0)

您的第二个错误是由运营商优先级引起的。

->的优先级高于*。因此*pL->value评估为*(pL->value)而不是(*pL)->value