-3

代码1:

i = 0;
while ( arr[i++] != EOF )
     printf("%d", i);

输出:1 2 3 4

代码2:

i = 0;
while ( arr[i] != EOF )
{
      printf("%d", i);
      i++;
}

输出:0 1 2 3

在上面的代码中,arr[] = "//\n\0"

但是,我认为 i++ 应该首先分配 i 并递增,对吗?

IE,

if i = 1
j = i++
j = 1 (Not 2)

那么,代码 1 中究竟发生了什么,为什么它的行为不像代码 2?

4

3 回答 3

2

i当你这样做时你会增加arr[i++],所以当你去打印它时,它当然已经增加了。

而是打印出数组元素,这样你就知道你得到了正确的元素:

i = 0;
char c;
while ( (c = arr[i++]) != EOF )
     printf("%c", c);
于 2012-12-21T19:42:30.837 回答
1

...也许我错过了您的问题的重点,但是:

So, what exactly is happening in code 1 and why it isn't behaving like code 2?

一旦你点击i++它,它将增加并将新值保存到i. 所以:

i = 0;                     // i = 0
while ( arr[i++] != EOF )  // i = 1, 2, etc now before the print
     printf("%d", i);      // the incremented i is printed

i = 0;                     // i = 0
while ( arr[i] != EOF )  
{
      printf("%d", i);     // i still = 0 and that's printed
      i++;                 // now i = 1, 2, etc
}

如果您询问i++vs++i一旦执行了增量(前或后)的行,则存储新值。所以在你的第一种情况下,增量是在 while 检查期间完成的,所以它在那个时候被保存了。

于 2012-12-21T19:43:04.700 回答
0

好吧,在代码中你i在递增它之后打印。

在循环条件之后,立即i递增并变为 1。当您打印时,i已经递增。这就是为什么它与代码 2 相比打印不同的原因。

于 2012-12-21T19:42:29.793 回答