C语言连续赋值问题
在双向链表中有句代码:head->next=head->prior=NULL;对此我有三种理解:1、head的next指针和prior指针指向同一个结点NULL;2、he...
在双向链表中有句代码:head -> next = head -> prior = NULL;
对此我有三种理解:1、head的next指针和prior指针指向同一个结点NULL;
2、head的next指针和prior指针分别指向不同的结点NULL;
3、它其实是 head -> prior = NULL; 和head -> next = head -> prior; 两句代码的复合,即先将head的prior指针指向NULL,再把head的next指针指向prior。
这三种理解哪种是对的?或者三种都不对? 展开
对此我有三种理解:1、head的next指针和prior指针指向同一个结点NULL;
2、head的next指针和prior指针分别指向不同的结点NULL;
3、它其实是 head -> prior = NULL; 和head -> next = head -> prior; 两句代码的复合,即先将head的prior指针指向NULL,再把head的next指针指向prior。
这三种理解哪种是对的?或者三种都不对? 展开
展开全部
那个,单刀直入谈问题吧。
首先我们应该知道,成员运算符 -> 优先级远高于 = 。
因此,源语句等价于
(head->next) = (head->prior) = NULL; // 推荐百度“C语言运算符优先级”
我们还应该知道,“=”运算符具有结合性,由右向左。
因此,源语句等价于
(head->next) = ((head->prior) = NULL); // 推荐百度“C语言赋值运算符结合性”
这时候就可以逐部分分析了:
首先执行 (head->prior) = NULL, 将 NULL 赋值给 head->prior (清空head->prior)。
紧随其后,该语句返回一个值 NULL(赋值语句返回值为被赋的值)。
这时候,执行 (head->next) = NULL 。
也就等价于
head->next = NULL ;
head->prior = NULL;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询