c - 在 for 循环中交换语句

标签 c

这是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
}

如您所见,标有XZ 的行完全没有用。因此:

char i = 0;
while (++i)
    printf("%d", i);

这意味着它将打印从 1 到 ++i 的结果为零的任何时候。

如果编译器中的 char 是有符号的,那么行为将留给实现,即使它很可能会溢出为负值并逐渐变为零。

如果 char 是正数,这将打印正值直到它溢出回 0。

关于c - 在 for 循环中交换语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11690866/

相关文章:

c - Realloc 不复制旧数据

c++ - C/C++ - 预编译 header - 封装、如何以及为什么需要配置?

c - 为什么在尝试修改字符串常量时会出现段错误?

c - 将 URL 传递给从 WAV 文件中提取样本的特定示例代码

c++ - 有效地实现下限/欧几里得整数除法

c++ - #include 指令中文件名的有效字符

c - 从文本文件中读取目录和文件名

比较 static char [] 和 const char *

c - C 编程中的整数数组

c++ - 有没有办法拥有一个 bitbucket 指针/C++)