1

我很难理解将 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 循环的测试条件的解释。

4

3 回答 3

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

它相当于比较*p1*p2NUL ( \0)。当到达字符串的 NUL 终止符时,循环将终止。

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

if您也可以在and语句中使用此速记,while以及其他类型。省略条件检查变量是否针对其类型的默认零值:'\0'对于字符,0对于整数,0.0f或者0.0对于浮点数和双精度数,NULL对于指针。

p = malloc(n);
if (p) {
    // if p is not null
}

int len = strlen(s);
while (len--) {
    // loop until len reaches 0
}
于 2013-04-15T03:23:20.990 回答
1

for (p1 = s; *p1; p1++)继续执行循环 while*p1为真,即,当地址处的字符值p1非零时,即,whilep1未指向 NUL 字节。

于 2013-04-15T03:22:22.067 回答
-1

外循环中的每个字符:

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

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

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

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

if (*p2 == ‘\0’) break;
于 2013-04-15T03:47:34.980 回答