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

阅读 4.7k
3 个回答

外层循环执行完毕,要对 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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进