※ 원본의 값이 변경되지 않지만 값을 전달할 때마다 복사손실의 문제(메모리 사용량이 증가)가 발생
#include <iostream>
using namespace std;
void swap(int num1, int num2){
int temp = num1;
num1 = num2;
num2 = temp;
}
int main(){
int a = 30, b = 50;
swap(a,b);
cout << "a : " << a << " b : " << b << endl;
return 0;
}
// a : 30 b : 50
변수를 주소나 포인터를 통해 받은 것이 아니므로 swap함수 내에서 num1, num2의 값만 서로 변경
※ 직접 참조를 하기 때문에 빠르고 복사손실의 문제가 없지만 원본 값이 변경될 수 있다.
#include <iostream>
using namespace std;
void swap(int &num1, int &num2){
int temp = num1;
num1 = num2;
num2 = temp;
}
int main(){
int a = 30, b = 50;
swap(a,b);
cout << "a : " << a << " b : " << b << endl;
return 0;
}
// a : 50 b : 30
num1 = a의 주소, num2 = b의 주소를 각각 참조
직접 주소를 가져와서 swap을 했으므로 a,b의 값도 변경
아래의 코드도 call by reference의 예시!
void swap (int *num1, int *num2){
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
아래 사이트에서 공부했습니다!
https://perfectacle.github.io/2017/10/30/js-014-call-by-value-vs-call-by-reference/
http://algamza.blogspot.com/2016/03/c-call-by-value-call-by-reference.html
https://codingplus.tistory.com/29
https://gma-log.tistory.com/106