티스토리 뷰

먼저 아래와 같은 test 코드를 보자.

#include <iostream>
using namespace std;

void func(int** map, int* ptr) {
    map[0][1] = 100;
    int b = 99;
    ptr = &b;
}


int main() {
    int a = 100;
    int* ptr = &a;

    int** map = new int* [2];
    map[0] = new int[2];
    map[1] = new int[2];

    map[0][0] = 0;
    map[0][1] = 0;
    map[1][0] = 0;
    map[1][1] = 0;

    func(map, ptr);

    cout << map[0][0] << ' ' << map[0][1] << ' ' << map[1][0] << ' ' << map[1][1] << ' ' << *ptr;
}

실행결과 :


다음과 같은 코드를 살펴보면 int형 포인터 ptr은 func 함수에 값에 의한 호출이 되었기 때문에 함수 내에서 값을 변경하여도 원래 변수의 값은 변하지 않는다. 

만약 참조에 의해서 ptr값을 변화시키려면 앞에 &를 붙여주면 된다.

void func(int** map, int* &ptr) {...}

 

하지만 int**형 으로 선언된 2차원 배열 map은 참조형&으로 인자로 전달하지 않아도, 원본에 의한 참조가 되어 함수 내에서 바뀐 값이 함수 밖에도 그대로 적용된다.

 

따라서 값에 의한 참조인지, 주소에 의한 참조인지 주의해서 사용해야한다.

댓글
반응형
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함