Programming Languages/C++ & Algorithm
c++ 2차원 동적배열의 참조에 의한 호출
둠드
2020. 9. 24. 13:54
먼저 아래와 같은 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은 참조형&으로 인자로 전달하지 않아도, 원본에 의한 참조가 되어 함수 내에서 바뀐 값이 함수 밖에도 그대로 적용된다.
따라서 값에 의한 참조인지, 주소에 의한 참조인지 주의해서 사용해야한다.