break结束for语句内循环,外循环问题

一,break结束内循环如下代码1所示:

#include <stdio.h>

int main()
{
    int i, j;

    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10;j++)
        {
            if (j == 3)
            {
                break;
            }
        }
    }
    printf("i = %d, j = %d \n", i, j);

    return 0;
}

运行结果如下图:

img

二,break结束内外循环如代码2所示

#include <stdio.h>

int main()
{
    int i, j;

    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10;j++)
        {
            if (j == 3)
            {
                break; //(第一个break)
            }
        }
        if (j == 3)
        {
            break;//(第二个break)
        }
    }
    printf("i = %d, j = %d \n", i, j);

    return 0;
}

运行结果如下图所示:

img

三,break结束外循环如代码3所示:

#include <stdio.h>

int main()
{
    int i, j;

    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10;j++)
        {
            if (j == 3)
            {
               
            }
        }
        if (j == 3)
        {
            break;
        }
    }
    printf("i = %d, j = %d \n", i, j);

    return 0;
}

运行结果如下图所示:

img

以上3串代码的结果都已显示。我不明白的是:

  1. 第3串代码的break为是什么没有截断第一个for,让i运行到了10?
  2. 如果第二个break不能截断第一个for,那为什么第二串代码中第二个break却可以结束第一个for?
  3. 说明上面问题之后,麻烦说一下代码2和代码3运行的细节过程,谢谢!因为初学所以想了解更细致一点。
    求有缘人详细解答一下!

第三个代码,执行完内循环的for,再执行下面的if

#include <stdio.h>
 
int main()
{
    int i, j;
 
    for (i = 0; i < 10; i++)
    {
/*
  这里的for循环里面什么都没做,仅仅是j一直累加
*/
        for (j = 0; j < 10;j++)
        {
            if (j == 3)
            {
               
            }
        }
        // 所以 运行到这里时 j=10 
        if (j == 3)
        {
            break; // 条件不满足,运行不到这里
        }
 // 上面的判断永远不成立,程序运行到这里后继续循环,直至i=10
    }
    printf("i = %d, j = %d \n", i, j);
 
    return 0;
}
#include <stdio.h>
 
int main()
{
    int i, j;
 
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10;j++)
        {
            if (j == 3)
            {
                break; //(第一个break)
            }
        }
        // 运行到这时,j==3
        if (j == 3)
        {
            // 这里判断成立,直接跳出for (j = 0; j < 10;j++)
            break;//(第二个break)
        }
    }
    printf("i = %d, j = %d \n", i, j);
 
    return 0;
}

话说 编译器还有一种功能 叫单步调试, 建议会运行代码后 先把怎么单步调试学会吧 这样可以让程序一步一步的执行,更能加深理解。