关于C/C++,for循环中的变量问题
如下面代码中,有以下几个问题:1.请问scanf("%d",&i[j]);这段代码中i[j],其中j的变量是for循环外面声明的,还是for循环括号条件里面已经赋值的?v...
如下面代码中,有以下几个问题:
1. 请问scanf ("%d",&i[j]);这段代码中i[j],其中j的变量是for循环外面声明的,还是for循环括号条件里面已经赋值的?
void main ()
{
int j;
int i[5];
int a = 0;
for (int j=1;j<=5;j++)
{
a++;
printf ("请输入第 %d 数字\n",a);
scanf ("%d",&i[j]);
}
}
补充:
for循环中的条件应该是这样的。上面代码写错了,不能直接在条件里面声明的
for (j=1;j<=5;j++) 展开
1. 请问scanf ("%d",&i[j]);这段代码中i[j],其中j的变量是for循环外面声明的,还是for循环括号条件里面已经赋值的?
void main ()
{
int j;
int i[5];
int a = 0;
for (int j=1;j<=5;j++)
{
a++;
printf ("请输入第 %d 数字\n",a);
scanf ("%d",&i[j]);
}
}
补充:
for循环中的条件应该是这样的。上面代码写错了,不能直接在条件里面声明的
for (j=1;j<=5;j++) 展开
展开全部
如果你是C语言编译,在for中是不能定义变量的,C++编译器可以,在for中的变量作用域在for代码块内,外部的j被隐藏.j在for中声明时被赋值,是一次性的,for的循环体不包含赋值语句.
VC6中好像这种写法有BUG,for中的变量具有函数的生命周期.之后的版本解决了这个问题.
VC6中好像这种写法有BUG,for中的变量具有函数的生命周期.之后的版本解决了这个问题.
更多追问追答
追问
是的,for循环里面不能声明的,刚才那段代码for循环中有问题。
追答
如果像你那样写,j的问题不存在了,但是有新问题,你的j在for循环中可以被加到5,如果j=5,那i[j]就溢出了.应该这样写for:
for (j=0;j<sizeof(i);j++)
{
printf ("请输入第 %d 数字\n",j+1);
scanf ("%d",&i[j]);
}
变量a都可以不要了.
展开全部
这个都没有区别,for(表达式1;表达式2;表达式3)
表达式1是在循环开始前先执行,表达式2时已判断语句,成立则循环执行,表达式是在循环最后执行,你在外面先定义int j, for(j=0;j<5;j++) 这样没问题阿,你也可以前面不定义直接for(int j =0;j<5;j++) ;给你讲一下有个叫做变量的生命周期 说下JAVA的(C好多年没有用了)在循环里申明的变量等循环结束后就释放了,意思就是你在for()里面申明的变量等for结束了这个变量就没有了。
表达式1是在循环开始前先执行,表达式2时已判断语句,成立则循环执行,表达式是在循环最后执行,你在外面先定义int j, for(j=0;j<5;j++) 这样没问题阿,你也可以前面不定义直接for(int j =0;j<5;j++) ;给你讲一下有个叫做变量的生命周期 说下JAVA的(C好多年没有用了)在循环里申明的变量等循环结束后就释放了,意思就是你在for()里面申明的变量等for结束了这个变量就没有了。
追问
如果是for循环括号条件里面的,那 scanf ("%d",&i[j]);中的j的数值范围只能是1~5吧?
追答
恩恩,是的,
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样的写法在老的C++标准下肯定是直接编译错误的,for 里面的 j 的作用域是和外面的j一样的。
在新的标准下,for 里面的j作用域会比外面的j深一层,如果编译不会有问题,下面scanf 里面用到的j,肯定是for那定义的j。C++的名称查找规则是由近及远的。
在新的标准下,for 里面的j作用域会比外面的j深一层,如果编译不会有问题,下面scanf 里面用到的j,肯定是for那定义的j。C++的名称查找规则是由近及远的。
追问
补充:
for循环中的条件应该是这样的。上面代码写错了,不能直接在条件里面声明的
for (j=1;j<=5;j++)
如果是这样的话,j的作用域是外面的还是for循环里面的呢?如果是里面的话,那 scanf ("%d",&i[j]);中的j的数值范围只能是1~5吧?
追答
这样的写法哪来的什么作用域的问题呢,只有一个j,作用域应该很清楚了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是for循环括号条件里面已经赋值的
for循环里面定义的变量具有局部作用域 会屏蔽在其他地方定义的同名变量
在c++里是可以那样写的
for循环里面定义的变量具有局部作用域 会屏蔽在其他地方定义的同名变量
在c++里是可以那样写的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询