我们可以在C中交换for循环参数吗?

我们可以在C中交换for循环参数吗?,c,for-loop,syntax,evaluation,C,For Loop,Syntax,Evaluation,在该程序中,输出为0。据我所知,for循环的第一个参数应该是初始化,然后是条件,然后是增量。但在这个问题中,初始化是在最后发生的,代码仍然给出了有效的结果。有人能解释一下吗?for循环的实际工作方式如下: 对于步骤0;步骤1;步骤3{ 步骤2; } 这里,步骤0只执行一次。然后第1步->第2步->第3步->第1步,循环继续 for循环的第一个参数应该是初始化,然后是条件,然后是增量 这更像是一个惯例。以这种方式解释for循环非常有意义,特别是因为在步骤1中,程序执行该语句,并且仅在返回true时

在该程序中,输出为0。据我所知,for循环的第一个参数应该是初始化,然后是条件,然后是增量。但在这个问题中,初始化是在最后发生的,代码仍然给出了有效的结果。有人能解释一下吗?

for循环的实际工作方式如下:

对于步骤0;步骤1;步骤3{ 步骤2; } 这里,步骤0只执行一次。然后第1步->第2步->第3步->第1步,循环继续

for循环的第一个参数应该是初始化,然后是条件,然后是增量


这更像是一个惯例。以这种方式解释for循环非常有意义,特别是因为在步骤1中,程序执行该语句,并且仅在返回true时才继续执行步骤2。因此我们以这种方式利用for循环。

实际上for循环的工作方式如下:

对于步骤0;步骤1;步骤3{ 步骤2; } 这里,步骤0只执行一次。然后第1步->第2步->第3步->第1步,循环继续

for循环的第一个参数应该是初始化,然后是条件,然后是增量


这更像是一个惯例。以这种方式解释for循环非常有意义,特别是因为在步骤1中,程序执行该语句,并且仅在返回true时才继续执行步骤2。因此我们以这种方式使用for循环。

对您的问题的简短回答我们可以在C中交换for循环参数吗?是:没有

这段代码,如果不是为了迷惑读者,一定是写得很糟糕

走过

i用值250初始化
我对你的问题的简短回答我们能用C交换for循环参数吗?是:没有

这段代码,如果不是为了迷惑读者,一定是写得很糟糕

走过

i用值250初始化
for语句中的子句或表达式总是根据它们在for语句中的第一、第二或第三个位置进行解释。在此代码中:

#include <stdio.h>

int main(void) {
    char i=250;
    for(i<0;i++;i=0,printf("%d", i));
    return 0;
}
如果char是无符号的或−6如果字符是有符号的,则从250到字符的转换使用8位和典型的2的补码换行。C标准允许其他可能性,但它们是不寻常的,在本答案中不再进一步讨论。
为了开始循环,初始子句ifor语句中的子句或表达式总是根据它们在for语句中的第一、第二或第三个位置进行解释。在此代码中:

#include <stdio.h>

int main(void) {
    char i=250;
    for(i<0;i++;i=0,printf("%d", i));
    return 0;
}
如果char是无符号的或−6如果字符是有符号的,则从250到字符的转换使用8位和典型的2的补码换行。C标准允许其他可能性,但它们是不寻常的,在本答案中不再进一步讨论。 为了启动循环,循环forinit的初始子句iA;康德;inc{body}基本上是这样执行的:

char i=250;
for(i<0;i++;i=0,printf("%d", i));
return 0;
在某些情况下,可以切换事物,但在一般情况下则不可以;康德;inc{body}基本上是这样执行的:

char i=250;
for(i<0;i++;i=0,printf("%d", i));
return 0;
在某些情况下,切换是可能的,但在一般情况下则不可能

我们可以在C中交换for循环参数吗

我们可以出于任何原因交换表达式本身,例如作为实验,因为这样做通常没有意义,但我们不能改变在某个位置计算表达式的语法

for循环有一个固定语法,通常遵循以下形式:

init;
while(cond) {
    body;
    inc;
}
你可以在你想使用的地方使用表达式,但效果却截然不同

例如,如果将初始化表达式放置在第二个位置,则它们将用作条件

如果你把in-/减量放在第二位,情况也是一样的。然后,它们也将被评估为条件

同样,如果将用作条件的表达式放在第一或第三位,则此表达式将不再用作条件

这就是C标准对这个主题所说的:

6.8.5.3报表格式

for (initializations; condition; in-/decrements)
1声明

for (initializations; condition; in-/decrements)
行为如下:表达式-2是在每次执行循环体之前计算的控制表达式。每次执行循环体后,表达式-3将作为无效表达式进行计算。如果子句-1是一个声明,那么它声明的任何标识符的范围都是声明和整个循环的剩余部分,包括其他两个表达式;它是在第一次计算控制表达式之前按照执行顺序到达的。如果第1条是一个表达式,则在对控制表达式进行第一次求值之前,将其作为无效表达式进行求值。161

2第1条和表达式-3均可省略。省略的表达式-2替换为非零常量

来源:ISO/IEC 9899:2018 C18,§6.8.5.3

我们能换车吗 对于C中的循环参数

我们可以出于任何原因交换表达式本身,例如作为实验,因为这样做通常没有意义,但我们不能改变在某个位置计算表达式的语法

for循环有一个固定语法,通常遵循以下形式:

init;
while(cond) {
    body;
    inc;
}
你可以在你想使用的地方使用表达式,但效果却截然不同

例如,如果将初始化表达式放置在第二个位置,则它们将用作条件

如果你把in-/减量放在第二位,情况也是一样的。然后,它们也将被评估为条件

同样,如果将用作条件的表达式放在第一或第三位,则此表达式将不再用作条件

这就是C标准对这个主题所说的:

6.8.5.3报表格式

for (initializations; condition; in-/decrements)
1声明

for (initializations; condition; in-/decrements)
行为如下:表达式-2是在每次执行循环体之前计算的控制表达式。每次执行循环体后,表达式-3将作为无效表达式进行计算。如果子句-1是一个声明,那么它声明的任何标识符的范围都是声明和整个循环的剩余部分,包括其他两个表达式;它是在第一次计算控制表达式之前按照执行顺序到达的。如果第1条是一个表达式,则在对控制表达式进行第一次求值之前,将其作为无效表达式进行求值。161

2第1条和表达式-3均可省略。省略的表达式-2替换为非零常量

来源:ISO/IEC 9899:2018 C18,§6.8.5.3


你的代码没有多大意义。初始化步骤是对标题的回答-不,你不能。@EugeneSh:很明显你可以,就像有人这样做一样。@EricPostphil问题的意思是..没有后果或..没有改变行为。“但你当然可以挑剔,”尤金内什说。我同意。这里非常明显地暗示了没有后果的代码。您的代码没有多大意义。初始化步骤是对标题的回答-不,你不能。@EugeneSh:很明显你可以,就像有人这样做一样。@EricPostphil问题的意思是..没有后果或..没有改变行为。“但你当然可以挑剔,”尤金内什说。我同意。这里非常明显地暗示了没有后果的后果。