' - >'有什么区别? struct node和struct node *之间?

时间:2015-09-24 05:44:52

标签: c pointers struct

我是指针的新手,这个代码用于合并排序链表。在这里,它已将虚拟节点声明为struct node dummy;,并且虚拟节点的下一个节点为NULL,因此要设置它,我们使用dummy.next = NULL;

/* Link list node */
struct node
{
    int data;
    struct node* next;
};
struct node* SortedMerge(struct node* a, struct node* b) 
{
   /* a dummy first node to hang the result on */   
   struct node dummy;      

   /* tail points to the last result node  */
   struct node* tail = &dummy;  

   /* so tail->next is the place to add new nodes 
     to the result. */
   dummy.next = NULL;
//Code continues...
}

我明白我可以使用它struct node *dummy; 但我们不能在这里使用它,因为它不是一个指针节点。 所以我的问题是为什么dummy->next = NULL不在这里工作? struct node和struct node * ??

之间有什么区别

4 个答案:

答案 0 :(得分:3)

a -> b(*a).b的缩写。

如果a不是指针,*a无效,a -> b也无效。

答案 1 :(得分:2)

dummy不是指向结构的指针。它本身就是结构变量。 只有当结构是指向结构的指针时,才可以使用运算符->来取消结构的属性。

如果您正在使用struct变量,那么.就是可以实现的方式,dummy就是这种情况。

答案 2 :(得分:1)

  

我知道如果是struct node *dummy;

,我可以使用它

如果是"它"你的意思是struct node dummy;然后答案是否定的。您不能使用指向node的指针,方法与指向node的指针相同。

  

所以我的问题是为什么没有dummy->next = NULL在这里工作?

因为dummynode,而不是指针,而运算符->是指针。表达式dummy->next(*dummy).next具有相同的语义。

答案 3 :(得分:1)

  

。所以我的问题是为什么不在这里使用dummy-> next = NULL? struct node和struct node *之间有什么区别?

声明为此struct node dummy;

dummy->next=NULL不起作用,因为dummy不是指向struct的指针。

如果你这样写 -

struct node A;  // then A is a struct variable which can access struct members  using '.' operator

和 -

struct node* B; // then B is a pointer to struct node which can access struct member using '->`  or like this (*B).data=something.