c语言中for循环条件的逻辑分析

for(;p<=temp->list+length-1&&*p!=value;p++) ;//不满足循环条件,退出
if(p<=temp->list+length-1)     //是*p==value的情况         
{
    ret = *(p-1);                     
    return true;
}          
return false;         //是p>temp->list+length-1的情况

分析:

当p>temp->list+length-1  或者 *p==value时,退出for循环,
//此时只需排除上述两者可能的一种,就一定是另一种可能。
理解方法1:有件事,是A或者B做的,已知不是A,那么肯定就是B了。

理解方法2:理解成电路并联:已知开关1和开关2并联,开关1或开关2 闭合都会使电路导通,其中就开关1,2理解成退出for循环的条件。

现在发现电路导通,但是开关1并没有闭合,则一定是上表中的第二种情况,即开关2闭合了。

开关1(p>temp->list+length-1开关2(*p==value)电路
101
011
111

理解方法3:理解成电路串联,开关1且开关2闭合,电路导通,其中就开关1,2理解成for循环中的条件,如下所示:

开关1(p<=temp->list+length-1开关2(*p!=value)电路
100
010
000
111

 上表中,每一行的的两个开关之间的关系是 且 的关系,如第一行中,开关1闭合开关2断开则电路不通,如下3行一样。

 再回到文章开头for循环示例:

 for(;p<=temp->list+length-1&&*p!=value;p++) ;//不满足循环条件,退出
if(p<=temp->list+length-1)     //这条的含义是:p<=temp->list+length-1*p==value的情况         
{
    ret = *(p-1);                     
    return true;
}          
return false;         //是p>temp->list+length-1*p!=value   和  p>temp->list+length-1*p==value两种情况都不合理。

总结:理解思路3更好一些,

两个循环条件且的关系->循环条件不满足,跳出循环->有3种条件情况,只取符合要求的那一种,即p<=temp->list+length-1*p==value的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值