티스토리 뷰
먼저 아래와 같은 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은 참조형&으로 인자로 전달하지 않아도, 원본에 의한 참조가 되어 함수 내에서 바뀐 값이 함수 밖에도 그대로 적용된다.
따라서 값에 의한 참조인지, 주소에 의한 참조인지 주의해서 사용해야한다.
'Programming Languages > C++ & Algorithm' 카테고리의 다른 글
c++ cin, scanf 속도 차이 얼마나 날까? (0) | 2020.10.05 |
---|---|
c++ 재귀 알고리즘을 이용한 조합(combination) 생성 (0) | 2020.09.28 |
C++ 반복자 , lower_bound, sort, unique, erase... (0) | 2020.09.23 |
재귀 함수를 이용한 순열 생성 알고리즘 (0) | 2020.09.21 |
[Algorithm] 입출력 파일 열기 (0) | 2020.09.19 |
댓글