1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    int num1 = 10;
    int num2 = 20;
    vector<int> vint;
 
    vint.push_back(num1);
    vint.push_back(num2);

 
    for (auto i : vint)
    {
        i++;    //여기서 i는 vint의 원소에 "직접" 접근해서 값을 변경 시키는게 아니라, vint의 원소의 값만 복사해서 i에 넣고 i++시켜서 i를 출력  
        cout << i << endl;
    }
    
    //위의 반복문에서 마치 vint의 값을 i++ 시켜서 변경시킨 것 처럼 보이지만 원소의 값은 그대로 유지됨 ★
    for (auto i = vint.begin(); i != vint.end(); ++i)
    {
        cout << *<< endl;    
    }
 
cs


(auto i : vint)


여기서 num1 메모리에 있는 값인 10을 복사해서 i에 넣으니 i를 변경 시켜도 원소의 실제값이 변하는게 아닌것?



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
    vector<sky*> vSky;
 
    sky *= new sky;
    sky *= new sky;
    vSky.push_back(a);
    vSky.push_back(b);
 
    //vSky의 원소 a와 b가 i에 들어감, 즉 i는 sky* i = a -> sky* i = b 순서로 백터 원소 범위 내에 순환됨
    //여기서 i는 주소값, vSky의 원소의 주소값임(a, b가 가리키는 주소값) 
    //즉 a, b가 푸쉬백으로 들어가서 원소가 됬으니 a와 b가 가리키는 주소값이 차례대로 들어감
    for (auto i : vSky)
    {
        i->num = 1;
 
        cout << i << endl;    
    }  
 
cs


sky라는 구조체를 만듬


for (auto i : vSky)


여기서는 a의 메모리에 들어 있는 주소값 즉 힙영역 메모리 주소값을 i에 넣어버리니 i로 멤버에 접근해서 변경하면 실제로 바뀌는 것?




여기까지만 하고 자야게따