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。

这三种理解哪种是对的?或者三种都不对?
展开
 我来答
9979496
2017-09-07 · TA获得超过1175个赞
知道小有建树答主
回答量:850
采纳率:100%
帮助的人:610万
展开全部

那个,单刀直入谈问题吧。

首先我们应该知道,成员运算符 -> 优先级远高于 = 。

因此,源语句等价于

(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;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式