嗨我有以下功能,它给出了错误
错误:在非结构或联合的情况下请求成员'prev'
void insert(struct node **start){
struct node *temp=*start,*next_node,obj;
int pos=0;
if(temp==NULL)
{
printf("The linked list is empty creating the linked list !!!!!!\n");
next_node=malloc(sizeof(struct node));
if(next_node==NULL)
{
printf("\n Sorry out of Memory !!!!!!! ");
}
else
{
printf("\n Adding the first element in the list !!!!!!");
enterData(&obj);
next_node->data1=obj.data1;
next_node->data2=obj.data2;
next_node->prev=NULL;
next_node->next=NULL;
*start=next_node;
printf("\n The linked list created sucessfully !!!!!!!!! ");
}
}
else{
printf("Enter the position where you want to Enter the element \n");
scanf("%d",&pos);
if(pos==1)
{
printf("\n Adding the element at the begining of the list !!!!! ");
next_node=malloc(sizeof(struct node));
enterData(&obj);
next_node->data1=obj.data1;
next_node->data2=obj.data2;
next_node->prev=NULL;
next_node->next=*start;
*start->prev=next_node; //The error is at this line of code
*start=next_node;
}
}
}
但是,如果我使用*start
(也是指向结构的指针)而不是在上面提到的代码行中使用temp
而不是注释。然后代码工作正常..?为什么会这样?
答案 0 :(得分:2)
将*start->prev
替换为(*start)->prev
,因为->
运算符比C precedance table中的*
运算符更紧密。
当你写:*start->prev
您希望它是:(*start)->prev
但实际上它是:*(start->prev)
P.S。操作员不是按照人们的预期从左到右(阅读英语的方向)进行排序。例如,2 + 3 * 5
的结果为17
而不 25
。这是因为*
将在执行+
之前执行,因为*
运算符具有比+
运算符更多的先验。