2

我只是想确认一下我对循环索引的怀疑。我正在使用 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 一样递增,然后我可以稍后使用这个值。IE:

 int index = 0;
 for(int j = 0; j<n; j++){
 . . .
 index ++;
 }
cout << index <<endl;

有人会为我确认吗?

4

3 回答 3

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的输出。

于 2013-11-15T06:31:55.213 回答
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 范围是循环。因此,它们在循环执行后不会变得无效或未定义。inglobalforfor

第二个例子::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

说明:: 的范围nglobalforfor循环,但由于在循环j内声明for,它的范围和生命周期是local循环的for。这意味着,将在循环j执行后被销毁。for这就是为什么,错误。

第三个例子:: 我想,你一定已经明白它和第一个例子差不多了。

现在对于您的疑问,“ ”不,除非您在循环In the first case I see that some random number is outputted.中做错了什么,否则这不会发生。for您可以发布第一个案例for循环代码,我们可以指出错误。

于 2013-11-15T07:05:09.657 回答
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
于 2013-11-15T06:34:05.543 回答