将for循环的测试条件设置为指针的功能是什么

时间:2013-04-15 03:20:30

标签: c

我有点难以理解为指针设置for循环的测试条件究竟是什么,或者甚至将其设置为变量值而没有任何比较。我在做作业的一个代码示例是:

int f ( char *s, char *t) {
  char *p1, *p2;
  for (p1 = s; *p1; p1++) {
    for (p2 = t; *p2; p2++)
      if (*p1==*p2) break;
    if (*p2 == ‘\0’) break;
  }
return p1-s;
}

我不是在寻找函数的解释,更多的是对两个for循环的测试条件的解释。

3 个答案:

答案 0 :(得分:3)

for (p1 = s; *p1; p1++) {
  for (p2 = t; *p2; p2++) {

这相当于将*p1*p2与NUL(\0)进行比较。当字符串的NUL终结符到达时,循环将终止。

for (p1 = s; *p1 != '\0'; p1++) {
  for (p2 = t; *p2 != '\0'; p2++) {

您也可以在ifwhile语句中以及其他类型使用此简写。退出条件会根据类型的默认零值检查变量:字符为'\0',整数为0,浮点数和双精度为0.0f0.0,{{ 1}}用于指针。

NULL

答案 1 :(得分:1)

for (p1 = s; *p1; p1++)为真时,

*p1继续执行循环,即地址p1处的字符值非零,即p1未指向一个NUL字节。

答案 2 :(得分:-1)

外循环中的每个字符:

for (p1 = s; *p1; p1++) {
}

是使用指针算法对内部循环测试每个字符的字符,如果有匹配则中断

for (p2 = t; *p2; p2++)
  if (*p1==*p2) break;

字符结束或内部循环为NULL,然后从循环中断

if (*p2 == ‘\0’) break;