首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中*head和(*head)指针的区别

C中*head和(*head)指针的区别
EN

Stack Overflow用户
提问于 2013-06-06 17:25:17
回答 5查看 1.2K关注 0票数 3

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

代码语言:javascript
复制
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;
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-06 17:29:22

*的优先级比->低,因此

代码语言:javascript
复制
*head->next

将等同于

代码语言:javascript
复制
*(head->next)

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

代码语言:javascript
复制
(*head)->next
票数 6
EN

Stack Overflow用户

发布于 2013-06-06 19:53:00

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

票数 2
EN

Stack Overflow用户

发布于 2013-06-06 17:29:06

不同之处在于运算符precedence of C

->的优先级比*

执行

适用于 *head->next

代码语言:javascript
复制
 *head->next  // head->next work first ... -> Precedence than *
      ^
 *(head->next) // *(head->next) ... Dereference on result of head->next 
 ^

适用于 (*head)->next

代码语言:javascript
复制
 (*head)->next  // *head work first... () Precedence
    ^
 (*head)->next  // (*head)->next ... Member selection via pointer *head 
        ^
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16958390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档