循环结构:FOR中的C

时间:2014-02-09 23:44:00

标签: c loops for-loop

代码:

int main()
{
   int i;
   char p[]="Hello",b[]="World!";
   for (i = 0; *p != '\0' ; i++, p+1); //what does the p+1 after ,
   printf("%s%s",p,b);
   return 0;
}

我的问题是循环的确切行为如何,因为这个程序永远不会结束,但如果我写

for(i=0; *p != '\0'; i++, printf("hi")); //this prints out hi

2 个答案:

答案 0 :(得分:1)

您评估p+1,但您从未将其存储在变量p中。因此,你永远不会“走”字符串,你永远不会找到终止字符。

评估p+1p++不同(评估p,然后将其递增并存储在p中)。

此外 - 您在for语句后面有一个分号,因此在循环终止之前您永远不会执行任何操作。换句话说,printf("%s%s",p,b);语句不是for循环的一部分(以防万一你想知道)。

通过将循环更改为:

,您可以看到这是真的
char* x;
for (i = 0; i<5 ; i++, x=p+1) {
  printf("%s\n", x);
}

看看会发生什么:

ello
llo
lo
o

您通常会这样做:

for (i = 0; *p != '\0' ; i++, p++) {
  printf("%s %s\n",p,b);
}

让你

Hello World
ello World
llo World
lo World
o World

答案 1 :(得分:0)

i++, p+1中的逗号运算符只执行这两项操作,即增量i然后评估(但抛弃结果)p+1。也许你的意思是i++, p++