你敢看不敢看

僵尸男孩 2013-11-18 05:02:50
问题如下
	while (*T)    //如果长度为n,只循环n-1次!!!
{

if(j==0||p[j-1]==p[i-1]) //如果这里这里j=0 , 那么p【-1】就已经溢出了,想请问下当电脑判断前面已经可以进入条件还会算后面的p[-1]么,就算不会这种代码有没有危险性?!
{
i++;
j++;
next[i]=j;
T++;
}
else
j=next[j];

}
}
...全文
179 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yu.sang 2013-11-19
  • 打赏
  • 举报
回复
标题党。。。
僵尸男孩 2013-11-18
  • 打赏
  • 举报
回复
引用 9 楼 Adol1111 的回复:
[quote=引用 7 楼 u011488256 的回复:] [quote=引用 1 楼 jzzjsy 的回复:] 哎,当j==0的时候,只是判断前面的语句,p[j-1] == p[i-1]不进行判断了,谢谢
为什么大家都不注意后面的问题··这种语句是不是有危险性? 是不是不应该这样写?[/quote] 没有危险性,因为||是任意条件为真整个表达式就为真,所以第一个为真时就不会判断第二个。同理&&第一个为假时,就不会判断第二个了。 比如,在链表里经常这样写if(p!=NULL&&p->value==value)类似的语句,但却不会写if(p->value == value && p!=NULL)一样。一旦判断到p为空了,那么整个表达式不可能成立,所以就不会判断后面的一句了。但反过来就不对了,p为空时,不能取p的value值,这是访问非法区域,触发段错误。[/quote] nice
Adol1111 2013-11-18
  • 打赏
  • 举报
回复
引用 7 楼 u011488256 的回复:
[quote=引用 1 楼 jzzjsy 的回复:] 哎,当j==0的时候,只是判断前面的语句,p[j-1] == p[i-1]不进行判断了,谢谢
为什么大家都不注意后面的问题··这种语句是不是有危险性? 是不是不应该这样写?[/quote] 没有危险性,因为||是任意条件为真整个表达式就为真,所以第一个为真时就不会判断第二个。同理&&第一个为假时,就不会判断第二个了。 比如,在链表里经常这样写if(p!=NULL&&p->value==value)类似的语句,但却不会写if(p->value == value && p!=NULL)一样。一旦判断到p为空了,那么整个表达式不可能成立,所以就不会判断后面的一句了。但反过来就不对了,p为空时,不能取p的value值,这是访问非法区域,触发段错误。
angel_su 2013-11-18
  • 打赏
  • 举报
回复
记得短路这种是被规范保证的,跟普通运算不一样,放心用。
僵尸男孩 2013-11-18
  • 打赏
  • 举报
回复
引用 1 楼 jzzjsy 的回复:
哎,当j==0的时候,只是判断前面的语句,p[j-1] == p[i-1]不进行判断了,谢谢
为什么大家都不注意后面的问题··这种语句是不是有危险性? 是不是不应该这样写?
AnYidan 2013-11-18
  • 打赏
  • 举报
回复
|| 和 && 被称为“短路”运算符
  • 打赏
  • 举报
回复
楼主if判断语句括号内用的逻辑运算符为或(||),其意思是两者之中有一者成立皆可执行if花括号内的函数体~由此,当||前面的条件已经满足,计算机不会理会||后面的内容。若楼主想计算机判断完前面的内容再判断后面的内容应该用逻辑运算符 且(&&)。
ForestDB 2013-11-18
  • 打赏
  • 举报
回复
看了,shortcut。
max_min_ 2013-11-18
  • 打赏
  • 举报
回复
引用 1 楼 jzzjsy 的回复:
哎,当j==0的时候,只是判断前面的语句,p[j-1] == p[i-1]不进行判断了,谢谢
对的!||的情况,当前面为真的话,后面就不再判断了! &&的情况,当前面为假的话,后面也不会再判断的!
图灵狗 2013-11-18
  • 打赏
  • 举报
回复
如果j==0的话,那么||后面就不会再理会了。
引用 楼主 u011488256 的回复:
问题如下
	while (*T)    //如果长度为n,只循环n-1次!!!
	{
		
		if(j==0||p[j-1]==p[i-1])   //如果这里这里j=0 , 那么p【-1】就已经溢出了,想请问下当电脑判断前面已经可以进入条件还会算后面的p[-1]么,就算不会这种代码有没有危险性?!
		{
			i++;
			j++;
			next[i]=j;
			T++;
		}
		else
			j=next[j];
		
	}
}
jzzjsy 2013-11-18
  • 打赏
  • 举报
回复
哎,当j==0的时候,只是判断前面的语句,p[j-1] == p[i-1]不进行判断了,谢谢

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧