读书人

您敢看不敢看

发布时间: 2013-11-20 12:46:02 作者: rapoo

你敢看不敢看
问题如下

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];

}
}

[解决办法]
引用:
Quote: 引用:

哎,当j==0的时候,只是判断前面的语句,p[j-1] == p[i-1]不进行判断了,谢谢


为什么大家都不注意后面的问题这种语句是不是有危险性? 是不是不应该这样写?

没有危险性,因为
[解决办法]
是任意条件为真整个表达式就为真,所以第一个为真时就不会判断第二个。同理&&第一个为假时,就不会判断第二个了。
比如,在链表里经常这样写if(p!=NULL&&p->value==value)类似的语句,但却不会写if(p->value == value && p!=NULL)一样。一旦判断到p为空了,那么整个表达式不可能成立,所以就不会判断后面的一句了。但反过来就不对了,p为空时,不能取p的value值,这是访问非法区域,触发段错误。

读书人网 >C语言

热点推荐