본문 바로가기
프로그래밍/C++

[C++]Pass By Value VS Pass By Reference

by hi-rachel 2023. 3. 26.

함수에 값을 전달하는 두 가지 방법이 있다.

 

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)

 

[JS]Pass By Value(primitives) VS Pass By Reference(objects)

👉 자바스크립트에서 값, 객체 복사/전달시 주의해야하는 점 Pass By Value(primitives) VS Pass By Reference(objects) 제목에 답이 있다. 먼저 JavaScript의 primitives 값(기본값)을 정확히 알고 있어야 하는데 이는

hi-rachel.tistory.com

 

[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.inflearn.com/course/10%EC%A3%BC%EC%99%84%EC%84%B1-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%81%B0%EB%8F%8C

 

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트 - 인프런 | 강의

네이버, 카카오, 삼성의 코딩테스트를 10주만에 합격시킨 최고의 코딩테스트 강의!, - 강의 소개 | 인프런

www.inflearn.com

https://www.javatpoint.com/call-by-value-and-call-by-reference-in-c

 

 

 

 

✏️ 공부하며 정리하는 글입니다. 수정할 점이 있다면 피드백 주세요. 감사합니다.