C中* head和(* head)指针之间的差异

时间:2013-06-06 09:25:17

标签: c pointers head

以下是示例代码,而不是工作代码。 我只是想知道C中指针中*head(*head)之间的区别。

int  insert(struct node **head, int data) {

      if(*head == NULL) {
        *head = malloc(sizeof(struct node));
        // what is the difference between (*head)->next and *head->next ?
        (*head)->next = NULL;
        (*head)->data = data;
    }

5 个答案:

答案 0 :(得分:6)

*的优先级低于->所以

*head->next

等同于

*(head->next)

如果您要取消引用head,则需要将解引用运算符*放在括号内

(*head)->next

答案 1 :(得分:2)

a + b和(a + b)之间没有区别,但a + b * c和(a + b)* c之间存在很大差异。它与* head和(* head)相同......(* head) - > next使用* head的值作为指针,并访问其下一个字段。 * head-> next相当于*(head-> next)...在你的上下文中无效,因为head不是指向struct节点的指针。

答案 2 :(得分:0)

不同之处在于运营商precedence of C

->的优先级高于*


执行

适用于*head->next

 *head->next  // head->next work first ... -> Precedence than *
      ^
 *(head->next) // *(head->next) ... Dereference on result of head->next 
 ^

适用于(*head)->next

 (*head)->next  // *head work first... () Precedence
    ^
 (*head)->next  // (*head)->next ... Member selection via pointer *head 
        ^

答案 3 :(得分:0)

-> *超过()(解除引用)运算符,因此需要*head 周围的括号 (*head)->next覆盖优先级。所以Correct是head,因为*head->next是指向struct的指针。

*(head->next)与{{1}}相同这是错误的(给你编译错误,实际上语法错误

答案 4 :(得分:0)

没有区别。

一般

然而,在这种情况下,它用于克服运算符优先级的问题:->绑定比*更紧密,因此没有括号*head->next可以达到{{1}的等效值1}}。

由于这不是您想要的,*(head->next)是括号,以便按正确的顺序进行操作。