C 如果将未声明的变量传递给for循环,并更改for循环的语法,会发生什么情况

C 如果将未声明的变量传递给for循环,并更改for循环的语法,会发生什么情况,c,for-loop,C,For Loop,//范例 #include<stdio.h> int main(){ int i,j; for(i<4; j=3; j=0){ printf("%d",i); } } #包括 int main(){ int i,j; 对于(i在for循环条件部分,j=3始终为真。这就是为什么你得到了一个无限的结果。因为只有中间条件会被比较,而且总是有一些不是0的东西,它会继续下去!因为for形式的循环 for (initialization;

//范例

#include<stdio.h>
    int main(){
    int i,j;
    for(i<4; j=3; j=0){
        printf("%d",i);
    } 
}
#包括
int main(){
int i,j;

对于(i在
for
循环条件部分,
j=3
始终为真。这就是为什么你得到了一个无限的结果。

因为只有中间条件会被比较,而且总是有一些不是0的东西,它会继续下去!

因为
for
形式的循环

for (initialization; condition; increment) {/*body*/}
可以转换为
while
循环,如下所示:

{
initialization;
while (condition)
    {
    /*body*/
    increment;
    }
}
您的计划可以有效地转化为:

int i,j;
{
i<4;
while (j=3)
    {
    printf("%d",i);
    j=0;
    }
}
inti,j;
{

我为什么要问?有什么可能的原因会有人这样做?当
for
中的字母互换为
rof
时会发生什么?同样的情况在这里发生。这没有意义。也许你应该在你的首选搜索引擎上查找
for
循环。在你的情况下,未定义的行为。
i
是未初始化的,循环中要做的第一件事是计算
i<4
(它访问
i
的值,因此行为是未定义的)试一试。它在一个调试器中逐行地逐行地检查代码,看看发生了什么。这是C和C++中的未定义行为,因为<代码> i <代码>是一个未初始化的变量,具有自动存储持续时间,它没有地址。@ Lundin谢谢,我编辑了答案。