2017-05-04 4 views
-4

Der Bereich für Schleife bietet verschiedene Adressen im Vergleich zur regulären for-Schleife. Wie kann ich erweiterte for-Schleifen verwenden?C++ - Bereich für Schleife anders als normal für Schleife

iArr Adresse: 011bf7cc

Bereich für Schleife Adressen: 011bf79c 011bf79c 011bf79c

Regular für Loop-Adressen: 011bf7cc 011bf79c 011bf7d4

#include <iostream> 
#include "TestingConstructors.h" 
#include <Windows.h> 

using namespace std; 


int main() { 
    int i, j, *i1, *i2; 
    i = 1; 
    j = 3; 
    i1 = &i; 
    i2 = &j; 
    *i1 = 2; 
    int iArr[3] = { 1,2,3 }; 
    cout << &iArr << endl << endl; 
    for (int i : iArr) 
      cout << &i << " "; 
    cout << endl << endl; 
    for (int i = 0; i < ARRAYSIZE(iArr); i++) 
      cout << &iArr[i] << " "; 
    system("pause"); 
    return 0; 
} 
+4

Warum setzen Sie den Code in Kursivschrift? –

+1

Die Adresse von 'i' ändert sich während der Schleife nicht. – crashmstr

+0

uhm fehler schlecht fix es –

Antwort

8

Es gibt nicht so etwas wie ein "enhanced for-Schleife". Dies ist eine „Entfernungs-for-Schleife“:

for (int i : iArr) 
     cout << &i << " "; 

Es gibt Ihnen eine andere Adresse, weil int i : iArrist eine Kopie von jedem Element iArr erstellen und zu i zuweisen.

Wenn Sie wollen auf die ursprünglichen Elemente beziehen, sollten Sie

verwenden
for (int& i : iArr) 
     cout << &i << " ";