본문 바로가기
Embedded System/소프트웨어 (C,C++)

[C/C++] Call By Value, Call by address

by MachineJW 2023. 8. 7.
/* Call By Value : 값에 의한 호출*/

#include <iostream>

using namespace std;

// swap 함수1: call by value 
void swap_1 (int a, int b){
	int tmp = 0; // 항상 초기값을 넣어주는 습관을 들이자 
	
	tmp = a;
	a = b;  
	tmp = b;	
}


// swap 함수2: call by address
void swap_2 (int* c, int* d){
	int tmp = 0;
	
	tmp = *c; // 간접 참조 연산자
	*c = *d;
	*d = tmp; 
}

int main() { 
	int m1=2;
	int n1=9;
	int m2=3; 
	int n2=10;
	swap_1(m1,n1); // 값에 의한 호출, call by value
	swap_2(&m2,&n2); // 주소에 의한 호출, call by address 
	cout << m1 << '\0' << n1 << endl;
	cout << m2 << '\0' << n2 << endl;
}

Call By Value

- 값에 의한 호출 (Call By Value)는 실인자의 값을 복사하여 전달하므로, 함수 내에서 실인자를 손상 시킬 수 없는 장점이 있다.

- 그러므로 함수 호출에 따른 부작용은 없을 것이다.

Call By Address

- 주소에 의한 호출(Call By Address)은 실인자의 주소(&주소연산자)를 넘겨주어 의도적으로 함수 내에서 실인자의 값을 변경하고자 할 때 이용된다.

- C++에서는 참조에 의한 호출 (Call By Reference) 의 개념을 추가 하였다.

요약

Call By Value는 실인자의 값을 함수 매개변수에 복사하므로 매개변수와 실인자는 서로 공간을 공유하지 않는다. Call By Address는 함수 호출 시 주소가 매개변수로 전달되어, 함수 내에서 참조 타입(*간접참조연산자)의 매개 변수를 이용하여 실인자의 값을 변경 할 수 있다.