代码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那样?
答案 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相比,它的打印方式不同。