我正在用 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
可以为 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));
}
}
关于c - :error: expected expression before 'struct' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33202148/