while(*p1) 什么意思

来源:百度知道 编辑:UC知道 时间:2024/06/28 17:46:48
int strstr(char *s1,char *s2) {
char *p1=s1,*p2=s2;
while(*p1) {
if(*p1==*p2) {
while(*p1&&*p2)
{
if(*p1==*p2)
{//相等则继续比较
p1++; p2++;
}
else
{//不相等,回退后继续比较
p1=p1-(p2-s2)+1;
p2=s2;
break;
}
}
if(!*p2)
{//比较完子串,完全相等
return 1;
}
}
p1++;
}
return 0;//不包含
}看不懂,请教大侠指点;
p2-s2是什么含义你‘’

*p1就是取当前指针指向的值.
while(*p1)就是表示当前指向的值不为空.也就是不为'\0',代表字符串有字母.不是指向最后一个.

C样式的字符串是以 '\0'字符结尾,实际上就是ASCII码的0,while(*p1)等价于while(*p1!=0),即while(*p1!='\0')

这个属于flag变量,如果P1指针不指向0,那while就通过,继续执行循环。

*p1为真则执行第一级{}
为真的条件为非空、非假、不为0

这个函数的功能是判断s2是不是s1的子串
while(*p1)是判断p1是否指向串尾~