Call by(함수 인자 전달 방식)이란..

캐모마일·2024년 3월 20일

수업일지

목록 보기
7/9
post-thumbnail

Call by --?

함수 인자 전달 방식을 3가지로 나눌 수 있다.

Call by value, Call by reference, Call by address이다.

call by value

매개변수를 받아 위치를 바꾸는 Swap 메서드를 만들어 보자.

void Swap(int x, int y) {
	int temp = x;
    x = y;
    y = temp;
}

실행은 Swap(a, b)로 한다
Swap에 int a, b : 1, 3을 넣은 다음 a b를 출력하면 3 1 이 출력될까? 아니다.
현재의 Swap 메서드는 들어온 값을 복사해 사용한다.
복사된 x와 y가 바뀐 것이기 때문에
이것이 바로 call by value, 값복사이다.

(복사기를 표현한 그림)

call by reference

그렇다면 Call by reference는 무엇인가??
바로 참조하는 것이다.
참조자 변수 &을 이용해 차이를 알아보자.

void Chamjo(int& x, int X);

내용이 있다고 치는 이런 메서드가 있다.
Chamjo(a, b)를 실행해보자.
그러면 x는 a 의 주소를 참조하며, x 의 값을 바꾸면 a 도 같이 바뀐다.
이를 call by reference라고 한다.

(x와 동거중인 a)

call by address

마지막으로 call by address를 알아보자.
call by address는 말 그대로 주소를 전달하는 것인데
매개변수로 주소를 담고 있는, 포인터 변수를 받아서 그 값을 사용한다.\
주소를 받는 Swap 메서드를 만들어 보자.
실행은 Swap(&a, &b)로 한다.

void Swap(int* x, int* y) {
	int temp = x;
    x = y;
    y = temp;
}

그러면 a, b의 주소가 전달되고, 역참조 연산자인 * 를 이용해 a, b 주소에 있는 값을 이용해 x, y의 값을 바꿀 수 있게 되었다.

(우편함을 표현한 그림)
우편 = 주소, 내용물 = 값

배열은 call by ??

답부터 말하자면 배열은 call by address이다.
배열의 이름은 주소를 담는 포인터 변수이고, 배열의 특정 인덱스에 접근하는 것은
배열[인덱스] 혹은 (배열의 주소 + 인덱스)를 역참조하여도 가능하다.

int arr[1]{1,3}
arr[1] == *(arr + 1)

0개의 댓글