2016-04-22 8 views
0

Ich versuche, durch Testen Sie die folgenden drei Beispiele den Umfang der for-Schleife zu verstehen:Umfang für Schleife mit alternativen Variablendeklarationen zu ändern:

Beispiel 1:

int a=15; 
for(a=1;a<3;a++) { 

    cout<<a<<endl; 
} 

cout<<a<<endl; 

Hier zeigt die Konsole 1 2 3. Allerdings hätte ich gedacht, dass es 1 2 15 anzeigen sollte, da normalerweise der Umfang der Variablen a innerhalb der for-Schleife innerhalb der for-Schleife bleibt.

Beispiel 2:

for (int a=1; a<3; a++) { 

    cout<<a<<endl; 
} 

cout<<a<<endl; 

In diesem Beispiel ist der Compiler die Variable A nach der for-Schleife nicht erkennt - wie erwartet. Wie konnte es in Beispiel 1 erkannt werden?

Beispiel 3:

int a=15; 
    for(int a=1;a<3;a++) { 

     cout<<a<<endl; 
    } 

    cout<<a<<endl; 

In diesem Fall zeigt die Konsole 1 2 15. Was ist der Unterschied zwischen diesem und Beispiel 1?

Vielen Dank im Voraus für Ihre Hilfe.

Antwort

3

Analyse Ihr Beispiel 1:

int a=15; 

Diese Zeile deklariert eine Variable a. Diese Variable kann gelesen oder geschrieben werden. Es ist gültig bis zum Ende des Blocks, in dem es erklärt wird. Hier ist kein solcher Block sichtbar; In einem realen Programm sind Blöcke Code zwischen { und }.

In diesen Zeilen ändern Sie die Variable aus der ersten Zeile. Es ist immer noch die gleiche Variable, es ist nur der Wert der Variablen, die sich ändert. Stellen Sie sich eine Variable wie ein Blatt Papier vor.Das Blatt bleibt für die ganze Zeit gleich, es ist nur so, dass Sie verschiedene Zahlen darauf (mit einem Bleistift) schreiben und sie löschen (mit einem Gummigummi).

cout<<a<<endl; 

Da es keine } war entsprechend, wird die Variable a ist hier noch sichtbar.


Beispiel 3 unterscheidet sich in einem Wort aus Beispiel 1: Das in der intfor Schleife. Diese int ist eine neue Variablendeklaration. Jetzt haben Sie zwei Variablen mit dem Namen a. Mit der Analogie der Papierblätter haben Sie gerade ein anderes Blatt Papier ergriffen und es über Ihr erstes Blatt gelegt. Das erste Blatt wird dadurch unsichtbar.

Am Ende der for Schleife, bei der Schließung }, nehmen Sie das obere Blatt (das an diesem Punkt hat die Nummer 3 geschrieben) und werfen Sie es in den Papierkorb. Dadurch wird das äußere Blatt wieder angezeigt, auf dem immer noch der Wert 15 steht.

2

In Beispiel 1, deklarieren Sie a außerhalb des Bereichs der for Schleife, und dann nicht erneut deklarieren (d. H. int a). Aus diesem Grund ist die Variable a innerhalb und außerhalb der Schleife gleich. In der ersten Iteration ist es 1 und wird dann auf 2 inkrementiert. Es erfüllt immer noch die Schleifenkriterien for, wird also erneut ausgeführt und erhöht sich dann auf 3. a entspricht nun nicht den for Schleifenkriterien Schleife mit einem Wert von 3 Schließlich wird wieder gedruckt, und sein Wert ist 3.

der Grund, dass a nicht außerhalb der Schleife in Beispiel 2 erkannt wird, ist, dass a wurde nie außerhalb der Schleife deklariert. Es ist eine Variable, die lokal für die for-Schleife ist und daher in keinem Bereich außerhalb dieser Schleife existiert.

In Beispiel 3 erklären Sie a ein zweites Mal, wenn sie in der for Schleife Erklärung Sie sagen int a = 1 anstatt nur a = 1. Dies bedeutet, dass es eine a lokale zu der for Schleife gibt, und eine a außerhalb dieser Schleife, die ihren Wert von vor der Ausführung der Schleife behält, da sie zwei verschiedene Variablen sind - sie haben den gleichen Namen, aber unterschiedliche Bereiche.

+0

Vielen Dank! Warum wird jedoch für Beispiel 1 die Modifikation von 'a' innerhalb der for-Schleife außerhalb der for-Schleife durchgeführt? @FCo –

+1

Dies liegt daran, dass 'a' innerhalb der Schleife genau die gleiche Variable wie' a' außerhalb der Schleife ist. Änderungen am Variablenwert bleiben erhalten. Sie sind gleich, da 'a' in der 'for'-Schleife nicht deklariert wurde. – FCo

1

Lösung für Ex 1: Im ersten Beispiel haben Sie var deklarieren ‚a‘ in der ersten Zeile das heißt vor für Schleife ausgeführt wird, zunächst der Wert ist 15, aber dann in for-Schleife Sie initialisieren es auf 1, Die for-Schleife iteriert zweimal, was zu 1 und 2 führt. In der dritten Iteration wird 'a' inkrementiert, also jetzt a = 3, aber die Bedingung schlägt fehl, da 'a' nicht kleiner als 3 ist.

Lösung für Ex 2: Als Variable deklariert in for-Schleife liegt in ihrem Umfang in der for-Schleife selbst somit die Variable für loop.Thus Fehler nicht zugänglich ist außerhalb

Lösung für Ex 3: Der Unterschied zwischen Ex1 und Ex3 ist in Beispiel 3 wir haben zwei Kopien von 'a', ist eine äußere for-Schleife, deren Wert 15 und eins innerhalb der for-Schleife, deren Bereich innerhalb der for-Schleife ist. a 'ergibt 1 2 als Ausgabe und die äußere var a ergibt am Ende 15.

Verwandte Themen