2017-05-04 59 views
-4

與常規的for循環相比,循環的範圍提供了不同的地址。 如何使用增強型for循環?循環的C++範圍不同於普通的循環

iArr地址:011bf7cc for循環地址

範圍:011bf79c 011bf79c 011bf79c

定期對循環地址: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

爲什麼你把你的代碼以斜體字? –

+1

在循環中'i'的地址不會改變。 – crashmstr

+0

呃錯誤修復它 –

回答

8

有沒有這樣的事,作爲一個「增強的for循環」。這是一個「範圍-for循環」:

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

它給你一個不同的地址,因爲int i : iArr創造iArr每個元素的副本,並將其分配給i

如果你想參考原來的元素,你應該使用

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