要求成员不在结构中

时间:2015-06-24 05:25:38

标签: c pointers struct

嗨我有以下功能,它给出了错误

错误:在非结构或联合的情况下请求成员'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而不是注释。然后代码工作正常..?为什么会这样?

1 个答案:

答案 0 :(得分:2)

*start->prev替换为(*start)->prev,因为->运算符比C precedance table中的*运算符更紧密。

当你写:*start->prev
您希望它是:(*start)->prev
但实际上它是:*(start->prev)

P.S。操作员不是按照人们的预期从左到右(阅读英语的方向)进行排序。例如,2 + 3 * 5的结果为17 25。这是因为*将在执行+之前执行,因为*运算符具有比+运算符更多的先验。