c 嵌套循环,内层循环只执行一次?

如题,c嵌套循环的时候,这种写法内层只执行了一次,求解!

#include <stdio.h>

void draw_box(int, int);
int main()
{
    draw_box(4, 5);
    return 0;
}

void draw_box(int row, int column)
{
    for (; row > 0; row--)
    {
        for (; column > 0; column--)
        {
            printf("x ");
        }
        printf("\n");
    }
}

结果中,明显换行输出了4次,但是内循环只执行了一次。

clipboard.png

阅读 1.1k
评论
    3 个回答
    • 2.2k

    外层循环执行完毕,要对 column 重新赋值,不然第一次循环之后 column 始终等于0,就不再继续执行了。

      抱歉!我有必要重新在给你答案,因为我上面给出的答案有些错误已经不是专业不专业问题了。

      drawbox函数两个形参int row,column, 实际就是drawbox的局部变量。

      两个for循环的变量row和column由于在定义函数时候没有“宣告”,所以代码编译的时候,row和column不被当作for"块内"变量, 而被当作是drawbox的局部变量:int row, column;

      所以for(column)这个循环执行第一周时候,column--作用在drawbox的局域变量column,所以在下一个循环的时候,for(column) 中的column由于是drawbox的column并且改写了column(等于0),所以column在后面一直等于0。

      我对for循环跟一般函数对外部变量的引用有些混肴了。在给出答案前一些概念没有捋清。羞愧。。。

      下面是其中一个改善方法:
      for(int i=column;i>0;i--)

      特别要更正的是,for循环结束时会释放它的局部变量的栈空间,假如当时for循环真有局域变量的话,在释放栈空间之后将不存在,所以不存在我第一次答案末尾对column 状态的观点,也就是如果column是for的本地变量的话,每次循环一周后,for本地的column的桟都会被“构析”,下一个循环的时候,for的column重置。

      而在本例中,for(column) 初始值位置没有对column宣告,所以column不是它的本地变量,而是引用了drawbox的变量。

        基本的循环知识掌握的不够好!

        内部循环完成后,需要在循环前面从新赋值

        clipboard.png

          撰写回答

          登录后参与交流、获取后续更新提醒