c - :error: expected expression before 'struct'

标签 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));
    }
}

有什么想法吗?!!

这涵盖了该错误,但现在我收到一个错误,内容是“错误:请求非结构或 union 中的成员‘值’。

完成了!感谢您的所有帮助!

最佳答案

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)。请注意这里的星号,您想要的是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 可以为 NULLNULL。一个简单的 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));
    }
}

关于c - :error: expected expression before 'struct' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33202148/

相关文章:

c - 优化了多模运算的逻辑运算?

c - 为什么即使缺少 return 语句,C 中的程序仍能编译?

c++ - 链表不编译

c - 打印链表会导致 C 程序出现段错误

c - malloc函数将所有数据分配到同一内存地址

c - linux 上的 mmap 错误(使用其他东西)

c - dev-c++ 上的异常标识符或 '(' 之前的 'for'

c - 在链表中存储行 (c)

c - 尝试访问 C 中释放的内存时没有警告

c - 局部变量内存和分配的内存位置