在C中评估后递增变量

时间:2012-12-21 19:38:11

标签: c

代码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并增加权利吗?

即,

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

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

3 个答案:

答案 0 :(得分:2)

当你执行i时,你会增加arr[i++],所以当你去打印它时,它会增加。

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

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

答案 1 :(得分: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检查期间完成,因此在那时保存。

答案 2 :(得分:0)

好吧,在代码中,在递增后打印i

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