This question already has answers here:
Closed 12 months ago.
C: What is the difference between ++i and i++?
(21个答案)
我在解一本书中的多项选择C代码。其中有两个问题涉及预递减和后递减初始化为0的char变量。两者的输出是非常不同的。我不明白那里发生了什么。
代码1
此代码段的输出为0。
代码2
这个输出是
0,-1,-2,…-128127126,….1。
有人能解释为什么会这样吗?
(21个答案)
我在解一本书中的多项选择C代码。其中有两个问题涉及预递减和后递减初始化为0的char变量。两者的输出是非常不同的。我不明白那里发生了什么。
代码1
char i=0;
do
{
printf("%d ",i);
}while(i--);
return 0;
此代码段的输出为0。
代码2
char i=0;
do
{
printf("%d ",i);
}while(--i);
return 0;
这个输出是
0,-1,-2,…-128127126,….1。
有人能解释为什么会这样吗?
最佳答案
在代码while
循环检查i==0
与否。如果i!=0
它将继续。
最初i
的第一个代码值。所以在打印后,它会检查是否0
。如果0
它将中断循环或通过递减i==0
继续。所以在代码1中使用了后递减。先检查值,然后递减值。
在第二个代码值i==0
时,初始值i
。因此,在打印后,它会递减,然后检查是否i
。它是预减量。先减小值,然后检查。
这里,0
是指0
的大小和范围。因此,在递减值i
至i==0
之后,它一直递减,直到它进入“cc>”,并通过打印0、1、…、- 128127……1退出循环。
10-08 03:55