2010-09-04 8 views
1
#include <iostream> 
using namespace std; 

int main() { 
    int i; 
    for(i=0; i <= 11; i+=3) 
     cout << i; 
    cout << endl << i << endl; 
} 

sortie est: 0 3 6 et 9, puis une fois qu'il sort de la boucle ses 12. Les adresses de i à l'intérieur de la boucle et à l'extérieur semblent être les mêmesC++: portée de la boucle for?

Ce que je dois savoir est: Est-ce que je à l'intérieur de la boucle for le même que le i qui a été initialisé en dehors de la boucle for parce que la variable i a été initialisée avant les boucles for que j'ai été créé?

Répondre

4

Il est dé même 'i' var

#include <iostream> 
using namespace std; 

int i = 0; 

int main() { 
    int i; 
    for(i=0; i <= 11; i+=3) 
     cout << i; 
    cout << endl << i << endl; 
    cout << endl << ::i << endl; 
} 

i est 12

:: i est 0

+0

Cela me semble beaucoup plus logique, merci. – John

+0

Bien expliqué! –

11

Oui, le i à l'intérieur de la boucle est le même que le i en dehors de la boucle car vous ne l'avez déclaré qu'une seule fois.

Si pour une raison quelconque, vous voulez qu'il soit différent (que je recommande fortement contre, vous devez choisir des noms différents pour les différentes variables), vous pouvez redéclarer i dans la boucle:

for (int i = 0; i ... 
1

Il n'y a une variable 'i'. Vous assignez simplement une valeur dans la boucle du foor.

1

Il n'y a qu'une seule variable existante - et oui, le i à l'intérieur de la boucle est le même que celui que vous produisez après avoir quitté la boucle. Cependant, la variable n'a été initialisée que dans le cadre de la boucle, pas avant.

2

Afin de créer un nouvel objet (variable) en C++ (ainsi que en C) vous devez explicitement définir il. Dans votre programme, vous avez une et une seule définition de variable - int i;. Cela signifie immédiatement qu'il y a une seule et unique variable i là. Il n'y a aucune chance pour un autre i, sans tenir compte des «étendues de for loop» ou de toute autre chose.

0

A for-loop de la forme:

for (init condition; expression) statement 

est exactement équivalent à:

{ 
    init 
    while (condition) 
    { 
     statement 
     expression; 
    } 
} 

donc avec votre code:

int i; 
    { 
     i=0; 
     while (i <= 11) 
     { 
      cout << i; 
      i += 3; 
     } 
    } 
    cout << endl << i << endl; 
} 

Pouvez-vous dire maintenant? Andrey puts it best: si vous ne l'avez pas défini, il n'existe pas.

Questions connexes