我正在使用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!感谢所有帮助!
答案 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