在C中对char变量进行后/预递减时,这里发生了什么
我在解一本书中的多项选择C代码。其中两个问题涉及对初始化为0的char变量进行预减量和后减量。两者的输出非常不同。我不明白那里发生了什么事 代码1在C中对char变量进行后/预递减时,这里发生了什么,c,char,C,Char,我在解一本书中的多项选择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; char i=0; do { printf("%d ",i); //
char i=0;
do
{
printf("%d ",i);
}while(i--);
return 0;
此代码段的输出为0
代码2
char i=0;
do
{
printf("%d ",i);
}while(--i);
return 0;
char i=0;
do
{
printf("%d ",i); //print 0
}while(--i); //decrement i, check i=-1, means true, next cycle, loop until i = 0 which means false
return 0;
此项的输出为0,-1,-2,…-128127126,….1 有人能解释为什么会发生这种情况吗?
的初始值为i
0
- 在代码1中,首先执行
while
检查,其中使用i
(=0
)的值,然后i
递减,因为它是后缀递减。因此它在打印
后退出0
李>
- 在代码2中,因为它是前缀递减,所以首先递减
i
,并且在执行while
检查时使用其值(=-1
)。在这里,它在打印
可以保存的整个值范围后退出,因为它仅在末尾变为有符号字符
0
的初始值为i
0
- 在代码1中,首先执行
while
检查,其中使用i
(=0
)的值,然后i
递减,因为它是后缀递减。因此它在打印
后退出0
李>
- 在代码2中,因为它是前缀递减,所以首先递减
i
,并且在执行while
检查时使用其值(=-1
)。在这里,它在打印
可以保存的整个值范围后退出,因为它仅在末尾变为有符号字符
0
- 在代码2中,因为它是前缀递减,所以首先递减
与否时,在两个代码i==0
处进行检查。如果
它将继续运行 最初i=0
的第一个代码值i
。因此,在打印0
之后,它会检查0
。如果i==0
它将中断循环或通过减小i==0
继续进行。因此,在代码1中,使用了后期递减首先检查值,然后递减值 在第二个代码值i
时,最初i
。因此,在打印0
之后,它将0
递减,然后检查i
与否。它是预减量先减小值,然后检查。i==0
这里,
是i
,大小是char
,范围是1字节
-128到127。因此,在将值
减至0
后,它将继续减至-1
并通过打印0、-1、-128127…1退出循环 在循环检查0
或不检查时,在两个代码i==0
处。如果
它将继续运行 最初i=0
的第一个代码值i
。因此,在打印0
之后,它会检查0
。如果i==0
它将中断循环或通过减小i==0
继续进行。因此,在代码1中,使用了后期递减首先检查值,然后递减值 在第二个代码值i
时,最初i
。因此,在打印0
之后,它将0
递减,然后检查i
与否。它是预减量先减小值,然后检查。 这里,i==0
是i
,大小是char
,范围是1字节
-128到127。因此,在将值
减至0
后,它将继续减至-1
并通过打印0、-1、-128127…1退出循环 代码10
char i=0; do { printf("%d ",i); }while(i--); return 0;
代码2char i=0; do { printf("%d ",i); // print o }while(i--); //check i = 0, means false, loop ends, then increment i return 0;
char i=0; do { printf("%d ",i); }while(--i); return 0;
代码1char i=0; do { printf("%d ",i); //print 0 }while(--i); //decrement i, check i=-1, means true, next cycle, loop until i = 0 which means false return 0;
代码2char i=0; do { printf("%d ",i); }while(i--); return 0;
char i=0; do { printf("%d ",i); }while(--i); return 0;
char i=0; do { printf("%d ",i); //print 0 }while(--i); //decrement i, check i=-1, means true, next cycle, loop until i = 0 which means false return 0;
和i--
都是表达式。表达式是可以产生值的语句的一部分。根据定义,预增量版本首先递增,然后生成值。对于增量后版本,情况正好相反 这完全独立于表达式是在--i
语句中使用还是在其他地方使用。但是,在使用此类表达式时,您需要注意。无论是while
还是i--
都是表达式。表达式是可以产生值的语句的一部分。根据定义,预增量版本首先递增,然后生成值。对于增量后版本,情况正好相反 这完全独立于表达式是在--i
语句中使用还是在其他地方使用。但是,在使用这些表达式时,您需要注意while
- 在代码2中,因为它是前缀递减,所以首先递减