为什么第三个for里面不用加int而第四个for里面不加int就报错呢?

编程遇到类似的问题我就写了这个小程序,在VC++6.0中编译为什么第三个for里面不用加int而第四个for里面不加int就报错呢?
void main()
{int a[3][4];
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
a[i][j]=i;
for(i=0;i<3;i++)
for(int j=0;j<4;j++)
a[i][j]=j;
}

qq_笑_17
浏览 491回答 2
2回答

波斯汪

举个例子来说吧,比如有这么个for循环:for(int i=0;i<3;i++)for(int j=0;j<4;j++)do_something();它可以展开为:int i=0;while(i<3){/*局部域A开始*/int j=0;while(j<4){/*局部域B开始*/do_something();j++;}/*局部域B结束*/i++;}/*局部域A结束*/相信学过C++的人都知道域的概念,这里while后面的大括号构成一个局部域,而int i和int j则恰恰只是这两个局部域的变量,因为他们的声明是在对应域的头部,但是i和j的位置是有区别的,请仔细看上面的注释。因此,上面的例子中,在域A以外引用j是非法的,但是,在域A外引用i不是非法的,因为i就是定义在域A之外的(实际上,i相当于是声明在全局域,即main域中的)。我想这也就同样解释了为什么楼主的代码中,第三个for中的i可以不加int,因为这时的i是已经在main里面声明过了的,因此不需要再声明。而j就不行。前面说过,第一个j的作用域在第4个for这里已经结束了,因此如果这里不加int直接对j进行引用将是非法的,所以必须加一个声明。所以一般遇到这种情况,我提倡这样写:void main(){int i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)…… // 做某些事情for(i=0;i<3;i++)for(j=0;j<4;j++)…… // 做其他事情}P.S. 楼上代码错误,i和j被重复声明。

浮云间

我想应该是 上面的主方法里定义过了 i ,而后面的j 前面没有定义,所有不能认识会报错!如果你这样就不会报错了void main(){int a[3][4];int i,j;for(int i=0;i<3;i++)for(int j=0;j<4;j++)a[i][j]=i;for(i=0;i<3;i++)for(int j=0;j<4;j++)a[i][j]=j;}
打开App,查看更多内容
随时随地看视频慕课网APP