我是指针的新手,这个代码用于合并排序链表。在这里,它已将虚拟节点声明为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 * ??
答案 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
在这里工作?
因为dummy
是node
,而不是指针,而运算符->
是指针。表达式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.