함수에 값을 전달하는 두 가지 방법이 있다.
1. Pass By Value (= Call By Value)
2. Pass By Reference
JavaScript에서 값 전달 방식을 보려면
2023.03.24 - [JavaScript] - [JS]Pass By Value(primitives) VS Pass By Reference(objects)
[C++] 값에 의한 호출
- 매개변수의 복사본을 해당 함수 내부로 넘기는 방식, 복사본을 넘기는 것뿐이기에 원본값은 변경되지 않는다.
예시)
#include <bits/stdc++.h>
using namespace std;
int add(int a, int b){
a += 10;
cout << a << '\n';
return a + b;
}
int main(){
int a = 1;
int b = 2;
int sum = add(a, b);
cout << a << '\n';
return 0;
}
/*
11
1
*/
vector 예시)
#include<bits/stdc++.h>
using namespace std;
vector<int> v(3, 0);
void go(vector<int> v){
v[1] = 100;
}
int main(){
go(v);
for(int i : v) cout << i << '\n';
}
/*
0
0
0
*/
원본값은 변경되지 않는다.
[C++] 참조에 의한 호출
- 원본변수의 주소를 매개변수로 함수에 전달하는 방법. 함수 내부에서 해당 매개변수를 변경하게 되면 실제 원본변수에도 반영이 된다.
예시)
#include <bits/stdc++.h>
using namespace std;
int add(int &a, int b){
a += 10;
cout << a << '\n';
}
int main(){
int a = 1;
int b = 2;
int sum = add(a, b);
cout << a << '\n';
return 0;
}
/*
11
11
*/
&a로 원본변수 a의 주소를 매개변수로 전달하니 원본값이 수정 됨을 확인할 수 있다.
vector 예시)
#include<bits/stdc++.h>
using namespace std;
vector<int> v(3, 0);
void go(vector<int> &v){
v[1] = 100;
}
int main(){
go(v);
for(int i : v) cout << i << '\n';
}
/*
0
100
0
*/
/*요약: 원본값을 수정하고 싶지 않다면 값에 의한 전달 즉 복사본을 함수 매개변수로 전달해주고, 원본 값 수정을 원한다면 원본 값 주소를 함수 매개변수로 전달해주자.*/
참고 자료
https://www.javatpoint.com/call-by-value-and-call-by-reference-in-c
✏️ 공부하며 정리하는 글입니다. 수정할 점이 있다면 피드백 주세요. 감사합니다.