:error: expected expression before 'struct'

:error: expected expression before 'struct'

我正在用 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));
    }
}

有什么想法吗?!!

那涵盖了那个错误,但现在我收到一条错误消息,“错误:请求成员 'value' 不是结构或联合。

完成!感谢您提供的所有帮助!

试试这个:

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

运算符是sizeof,不是sizeOf

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

你的第二个错误是由于运算符的优先级。

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

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 * 类型(a 指针指向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));
    }
}

我真的很想知道为什么你在 this 最后一行中得到了正确的括号,但仍然看不到你自己上面几行的错误?在这里补充一下:精确和认真在编程中是至关重要的(在像 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));
    }
}