循环中的指针递增,解除引用和比较

时间:2012-01-12 13:58:26

标签: c

这两个意思不一样,首先得到值然后递增?

for ( ; *s == *t; s++, t++)

for ( ; *s++ == *t++;)

4 个答案:

答案 0 :(得分:6)

如果for循环包含引用st的内容,则为“否”。第一个循环可以重写为

while (true)
{
   bool are_equal = *s == *t;
   if (!are_equal) break;

   // Perform stuff inside the for loop
   // Note that 's' and 't' are not increased yet in here.

   ++ s;
   ++ t;
}

第二个循环可以重写为

while (true)
{
   bool are_equal = *s == *t;
   ++ s;
   ++ t;
   if (!are_equal) break;

   // Perform stuff inside the for loop
   // Note that 's' and 't' have been increased in here.
}

答案 1 :(得分:2)

它们都在增量之前进行比较,但是如果循环体不是空的,则第一个版本将增加s和t 主体之后,而第二个版本将增加它们之前 em>身体。

答案 2 :(得分:2)

for ( ; *s == *t; s++, t++)

相当于:

while (*s == *t)
{
    ...
    s++;
    t++
}

,同时:

for ( ; *s++ == *t++;)

相当于:

while (*s++ == *t++)
{
    ...
}

重要的区别在于,在第一种情况下,s和t在循环体的 end 处递增,而在第一种情况下,它们在 start 处递增循环体。

另一个区别是s和t在第二个循环中比在第一个循环中增加一个tiem。在第一种情况下,s和t甚至可能根本没有增加(如果s[0] != t[0]),而在第二种情况下,它们总是至少增加一次(即使s[0] != t[0])。

答案 3 :(得分:1)

循环将运行相同的次数,但循环体中存在差异:第一个循环将看到原始st,而第二个循环将看到原始{{1}}和{{1}}看他们后增量。