为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_笑_17 2022-06-01 18:14:08
编程遇到类似的问题我就写了这个小程序,在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;}
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

举个例子来说吧,比如有这么个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被重复声明。


查看完整回答
反对 回复 2022-06-06
?
浮云间

TA贡献1829条经验 获得超4个赞

我想应该是 上面的主方法里定义过了 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;
}


查看完整回答
反对 回复 2022-06-06
  • 2 回答
  • 0 关注
  • 490 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号