我刚刚开始用C ++编程,在编写代码时我开始注意到我的代码中有很多for循环,然后我开始思考。
在for循环中,当您创建如for (int **i**=1;i<10;i++)
之类的变量时,循环完成后i
会发生什么?
是否可以使用相同的变量名创建多个for循环?
如何在循环中创建变量?
答案 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;我&#39;将获得输入条件中指定的最后一个值。
这取决于用于运行此代码的语法或语句。
将为不同的声明分配不同的变量名称。
这也属于第一个问题。此外,您需要考虑此代码的位置 将在网络,移动应用程序或程序中使用。
最佳做法是在执行任何条件或陈述之前创建变量。
答案 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-
for(int i = 1; i < 10; ++i)
{
// loop body
}
// i is still visible here
i = 42; // no error