这是C中的代码行。
这里循环的条件是++i。
那么编译器如何决定考虑哪个条件,因为这里有其他两个条件出现?
char i=0;
for(i<=5&&i>-1;++i;i>0)
printf("%d",i);
输出
1234..127-128-127....-2-1
最佳答案
for
语句的工作原理如下:
for (X; Y; Z)
{
...
}
翻译成
X;
while (Y)
{
...
Z;
}
因此您的代码更改自:
char i=0;
for(i<=5&&i>-1;++i;i>0)
printf("%d",i);
到:
char i = 0;
i<=5 && i>-1; // X
while (++i) // Y
{
printf("%d", i);
i > 0; // Z
}
如您所见,标有X
和Z
的行完全没有用。因此:
char i = 0;
while (++i)
printf("%d", i);
这意味着它将打印从 1 到 ++i
的结果为零的任何时候。
如果编译器中的 char
是有符号的,那么行为将留给实现,即使它很可能会溢出为负值并逐渐变为零。
如果 char
是正数,这将打印正值直到它溢出回 0。
关于c - 在 for 循环中交换语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11690866/