在循环中使用相同的变量名是否可以?

时间:2017-10-23 07:54:00

标签: c++ loops for-loop while-loop

我刚刚开始用C ++编程,在编写代码时我开始注意到我的代码中有很多for循环,然后我开始思考。

在for循环中,当您创建如for (int **i**=1;i<10;i++)之类的变量时,循环完成后i会发生什么? 是否可以使用相同的变量名创建多个for循环? 如何在循环中创建变量?

5 个答案:

答案 0 :(得分:6)

  

......循环结束后i会发生什么?

它超出了范围。

  

是否可以使用相同的变量名创建多个for循环?

是的,这样做是可以的,而且很普遍。

  

在循环中创建变量怎么样?

在while循环内创建的变量是while循环体的局部变量。它们与在for循环头的第一部分中创建的运行变量不同,后者仅在第一次输入循环之前执行。

答案 1 :(得分:1)

这取决于,如果您在i中定义迭代值for(),它是一个局部变量,并且只在for()内声明,因此您不应该将它用于另一个循环在for()内(除了你有充分的理由)。

以下代码例如会抛出一个错误,因为变量i未在for()循环之外声明,因为它在一般main(){}内无法访问:

#include<cstdlib>
#include<iostream>

int main()
{
  for (int i = 5; i > 0; i--) {
    std::cout << "Iteration: " << i << std::endl;
  }
  std::cout << "Iteration outside of 'for': " << i << std::endl; // Error

  return 0;
}

答案 2 :(得分:1)

在循环中创建的变量是在循环之后不会保留相同值的变量。它只是一个时间价值。 例如,当您使用第一个“i”变量时,此代码将打印i = 10。

   #include <iostream>

using namespace std;

int main()
{
    int i = 0;

    for (i = 1; i<10; i++);

    cout << i;

    return 0;
}

我们在c ++中,所以你可以在一个循环中完美地创建另一个“i”变量,它将具有一个时间值:

#include <iostream>

using namespace std;

int main()
{
    int i = 0;

    for (int i = 1; i<10; i++);

    cout << i;

    return 0;
}

它将打印“i”而不是时间值,即0。

答案 3 :(得分:1)

&#39; i&#39;循环完成后?

&#39;我&#39;将获得输入条件中指定的最后一个值。

是否可以使用相同的变量名创建多个for循环?

这取决于用于运行此代码的语法或语句。

将为不同的声明分配不同的变量名称。

这也属于第一个问题。此外,您需要考虑此代码的位置 将在网络,移动应用程序或程序中使用。

在循环中创建变量怎么样?在此先感谢。

最佳做法是在执行任何条件或陈述之前创建变量。

答案 4 :(得分:1)

i j k这样的通用名称确实很常用,但实际上这是一种常见的不良做法。变量名称应正确反映存储值的用途。例如,如果它用于索引项目的向量,那么它应该被命名为item_index,而不仅仅是i。这似乎是不必要的冗长,但这种方法有助于避免在具有通用名称的变量混乱时避免常见错误,例如将此frobs[i] = some_frob; bars[j] = some_bar;frobs[bar_index] = some_frob; bars[frob_index] = some_bar;进行比较。实际上在这种情况下,不仅索引变量名称应该是非泛型的,但变量类型也不应该是通用的,因此将一种索引类型转换为另一种索引类型需要显式转换。我认为存在几个通用命名变量的情况类似于Three Star Programmer,因为它应该永远不会发生在正确编写的代码中。

在循环范围内声明的变量在循环范围之外是不可见的,因此没有问题。然而,构造for(int i=1;i<10;i++)实际上是一个语法缺陷,因为它忽略了正常的作用域规则,并使得在作用域内可见的循环作用域外的变量i可见。这实际上与C不同,其中禁止在for构造内声明变量。基本上

for(int i = 1; i < 10; ++i)
{
   // loop body
}
// i is not visible here
i = 42; // error
C ++中的

更紧凑
{
    int i;
    for(i = 1; i < 10; ++i)
    {
       /* loop body */
    }
}  
/* i is not visible here */
i = 42; /* error */

在C。

然而,有些编译器可能会演示非标准行为,并且即使在for循环退出后,也允许在for构造内声明的变量可见。例如,带有/Zc:forScope-

的Visual C ++
for(int i = 1; i < 10; ++i)
{
   // loop body
}
// i is still visible here
i = 42; // no error