Ucl*_*dde 104 c loops for-loop nested
我可以在for循环内部使用相同的计数器变量for吗?
或者变量会相互影响吗?以下代码是否应该为第二个循环使用不同的变量,例如j,或者是否i正常?
for(int i = 0; i < 10; i++)
{
for(int i = 0; i < 10; i++)
{
}
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*hil 136
您可以使用相同的名称(标识符).这将是一个不同的对象.它们不会相互影响.在内部循环内部,无法引用外部循环中使用的对象(除非您为此做出特殊规定,例如通过提供指向它的指针).
这通常是不好的风格,容易混淆,应该避免.
只有在内部单独定义的情况下,对象才会有所不同,就像int i您所示.如果在未定义新对象的情况下使用相同的名称,则循环将使用相同的对象并相互干扰.
das*_*ght 55
首先,这是绝对合法的:代码将编译并运行,重复嵌套循环的主体10×10 = 100次.i嵌套循环内的循环计数器将隐藏外循环的计数器,因此两个计数器将彼此独立地递增.
由于外部i是隐藏的,嵌套循环体内的代码只能访问嵌套循环的值,i而不能i访问外部循环.在嵌套循环不需要访问外部i代码的情况下,这是完全合理的.但是,这可能会给读者带来更多的困惑,因此避免编写此类代码以避免"维护责任"是个好主意.
注意:即使两个循环的计数器变量具有相同的标识符i,它们仍然是两个独立的变量,即您在两个循环中都没有使用相同的变量.在两个循环中使用相同的变量也是可能的,但代码将难以阅读.这是一个例子:
for (int i = 1 ; i < 100 ; i++) {
for ( ; i % 10 != 0 ; i++) {
printf("%02d ", i);
}
printf("%d\n", i);
}
Run Code Online (Sandbox Code Playgroud)
现在两个循环都使用相同的变量.但是,如果不编译它,它需要一段时间来弄清楚这段代码的作用(演示);
OmG*_*OmG 25
您可以.但是你应该知道is 的范围.如果我们称之为外i与i_1和内i带i_2,所述的范围iS是如下:
for(int i = 0; i < 10; i++)
{
// i means i_1
for(int i = 0; i < 10; i++)
{
// i means i_2
}
// i means i_1
}
Run Code Online (Sandbox Code Playgroud)
您应该注意到它们不会相互影响,只是它们的定义范围不同.
小智 16
这是完全可能的,但请记住,你不能解决 第一个声明我
for(int i = 0; i < 10; i++)//I MEAN THE ONE HERE
{
for(int i = 0; i < 10; i++)
{
}
}
Run Code Online (Sandbox Code Playgroud)
在第二个子循环中的第二个循环中
for(int i = 0; i < 10; i++)
{
for(int i = 0; i < 10; i++)//the new i
{
// i cant see the i thats before this new i here
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要调整或获取第一个i的值,请在第二个循环中使用j
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 10; j++)
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果你的创意足够,你可以在一个循环中完成它们
for(int i ,j= 0; i < 10; (j>9) ? (i++,j=0) : 0 ,j++)
{
printf("%d %d\n",i,j);
}
Run Code Online (Sandbox Code Playgroud)
H.S*_*.S. 12
是的,您可以为内for循环使用与外for循环相同的计数器变量名称.
来自for循环:
for ( init_clause ; cond_expression ; iteration_expression ) loop_statement
作为表达语句loop_statement建立它自己的块范围,从范围不同的init_clause.Run Code Online (Sandbox Code Playgroud)for (int i = 0; ; ) { long i = 1; // valid C, invalid C++ // ... }
的范围loop_statement被嵌套的范围内init_clause.
来自C标准#6.8.5p5迭代语句[强调我的]
迭代语句是一个块,其范围是其封闭块范围的严格子集.循环体也是一个块,其范围是迭代语句范围的严格子集.
来自C标准#6.2.1p4标识符的范围[强调我的]
....在内部范围内,标识符指定在内部范围内声明的实体; 在外部作用域中声明的实体在内部作用域内隐藏(并且不可见).
是的,你肯定可以使用相同的名称变量.
C编程变量可以在三个地方声明:
局部变量: - 内部函数或块.
全局变量: - 所有功能之外.
形式参数: - 在函数参数中.
但在你的情况下, i scope必须要考虑下面的事情
for(int i = 0; i < 10; i++)
{
// i means 1st for loop variable
for(int i = 0; i < 10; i++)
{
// but here i means 2nd for loop variable
}
//interesting thing here i means 1st for loop variable
}
Run Code Online (Sandbox Code Playgroud)
注意:最佳做法是为内循环和外循环使用不同的变量
小智 8
是的,你可以使用它,但它很混乱.最重要的是循环内局部变量的范围.至于在函数内声明变量,该变量的范围就是该函数.
int a = 5;
// scope of a that has value 5
int func(){
int a = 10;
// scope of a that has value 10
}
// scope of a that has value 5
Run Code Online (Sandbox Code Playgroud)
类似于循环的情况,在内部循环内声明的变量具有不同的范围,并且声明外部循环的变量具有不同的范围.
for(int i = 0; i < 10; i++){
// In first iteration, value of i is 0
for(int i = 1; i < 10; i++){
// In first iteration, value of i is 1
}
// In first iteration, value of i is 0
}
Run Code Online (Sandbox Code Playgroud)
更好的方法是为内循环和外循环使用不同的变量.
for(int i = 0; i < 10; i++){
for(int j = 1; j < 10; j++){
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
是的 - 更有趣的是,每次打开一组大括号时,您都可以重用变量名称.插入诊断代码时,这通常很方便.键入一个开括号'{',然后声明和使用变量,然后关闭括号,变量就会消失.这可以保证您不会干扰主体中的任何内容,同时仍然保留在大括号外声明的任何变量,类和方法的优点.