본문 바로가기
Programming/C, C++

LV2 C++ 값에 의한 호출(Call by Value)과 참조에 의한 호출(Call by Reference)

by Dev_카페인 2022. 9. 13.
반응형

 

[lv2/C++] 값에 의한 호출(Call by Value)과 참조에 의한 호출(Call by Reference)

 

일반적으로 함수에 값만 전달하는 경우가 있는 반면에 값을 다시 가져와서 사용해야 하는 경우가 있다. 계산되는 결과를 가져오는 경우 함수의 반환값을 이용할 수 있지만 반환값은 한 형태의 값만 반환할 수 있기 때문에 여러 개의 값을 동시에 사용하는 경우 이용하기 힘들다. 여기서 값만 전달 하는 경우를 값에 의한 호출 (Call by Value)이라고 하고 매개변수의 주소값을 이용해서 전달하는 경우를 참조에 의한 호출(Call by Reference)이라고 한다.

 

두개의 값을 바꾸는 프로그램을 통해 비교해 보도록 하자.

 

값에 의한 호출 (Call by Value)

#include <iostream>

using namespace std;
void swap(int x, int y);

int main()
{
	int a = 10;
	int b = 20;

	swap(a, b);

	cout << "2. a = " <<  a << " , b = " << b << endl;
}

void swap(int x, int y) {
	
	int temp = x;
	x = y;
	y = temp;
	cout << "1. x = " << x << " , y = " << y << endl;
}

참조에 의한 호출 (Call by Reference)

#include <iostream>

using namespace std;
void swap(int *x, int *y);

int main()
{
	int a = 10;
	int b = 20;

	swap(&a, &b);

	cout << "2. a = " <<  a << " , b = " << b << endl;
}

void swap(int *x, int *y) {
	
	int temp = *x;
	*x = *y;
	*y = temp;
	cout << "1. x = " << *x << " , y = " << *y << endl;
}

참조에 의한 호출은 값에 의한 호출과 다르게 a와 b의 값이 바뀌었다. 포인터를 정확하게 이해하고 있다면 어렵지 않다.

 

반응형

'Programming > C, C++' 카테고리의 다른 글

LV2 C++ 인라인(Inline) 함수  (0) 2022.09.13
LV2 C++ 재귀(recursion) 호출  (0) 2022.09.13
LV2 C++ 함수(function) 사용 기초  (0) 2022.09.13
LV2 C++ 동적 할당(Dynamic Allocation)  (0) 2022.09.08
LV2 C++ 포인터(Pointer) 사용  (0) 2022.09.08