我只想确认一下我对循环索引的怀疑。我正在使用c ++。 我的代码中有两个for循环。对于一个我声明我的索引在循环之外,即
int i;
for(i = 0; i < n; i++){
. . .
}
cout << i <<endl;
然后我有了:
for(int j = 0; j<n; j++){
. . .
}
cout << j <<endl;
在第一种情况下,我看到输出了一些随机数。在第二种情况下,我得到一个关于-fpermissive或类似的错误消息。我只是想在循环结束时确认索引超出范围,因为这似乎正在发生的事情。 我试图稍后使用索引,我想我只需要在循环中放入第二个索引来增加i或j,然后我可以稍后使用该值。即:
int index = 0;
for(int j = 0; j<n; j++){
. . .
index ++;
}
cout << index <<endl;
有人会为我确认这个吗?
答案 0 :(得分:1)
在第一种情况下,由于j在循环外声明,因此i的范围甚至是循环的外部。所以,
cout<<i<<endl;
打印n
的值。第二种情况,j在循环中声明。所以j的范围只在循环内部;所以你得到了错误。
所以第一个案例本身你可以在后期阶段使用i的值
#include<stdio.h>
main()
{
int i;
for(i=0;i<5;i++)
printf("%d\n",i);
return 0;
}
给了我一个5的输出。
答案 1 :(得分:1)
第一个例子:: http://codepad.org/L5VErMAh
int main( void )
{
int i, n = 10 ;
for(i = 0; i < n; i++){
// do something useful. . .
}
cout << i <<endl;
return 0 ;
}
输出:: 10
说明:: i
循环的n
和global
范围为for
。因此,在执行for
循环后,它们不会变为无效或未定义。
第二个例子:: http://codepad.org/iqNtQ1Ok
int main( void )
{
int n = 10 ;
for(int j = 0; j < n; j++){
// do something useful. . .
}
cout << j <<endl;
return 0 ;
}
输出:: name lookup of 'j' changed for new ISO 'for' scoping
解释:: n
的范围global
为for
循环但j
在for
循环内声明,其范围和生命周期local
循环为for
。这意味着,j
将在执行for
循环后被销毁。这就是错误的原因。
第三个例子::我想,你必须知道它与第一个例子完全相同。
现在你怀疑,“In the first case I see that some random number is outputted.
”不,除非你在for
循环中做错了什么,否则这种情况不会发生。您可以发布第一个案例for
循环代码,我们可以指出错误。
答案 2 :(得分:0)
这个人只会打印n
int i;
for(i = 0; i < n; i++){
//...
}
cout << i <<endl;//prints the value of n
这个J被宣布超出范围
for(int j = 0; j<n; j++){
. . .
}
cout << j <<endl; //the compiler asks: whats a j?
,最后一个与第一个
相同 int index = 0;
for(int j = 0; j<n; j++){
. . .
index ++;
}
cout << index <<endl;//still prints n