이번 글을 통해 배워갈 내용
- 값에 의한 전달 (pass by value)
- 주소에 의한 전달 (pass by address)
- 참조에 의한 전달 (pass by reference)
값에 의한 전달 (pass by value),
주소에 의한 전달 (pass by address),
참조에 의한 전달 (pass by reference)
3분안에 배워보기
오늘도 긴 내용을 짧고 굵게 요약해서 배워보겠습니다.
먼저 퀴즈를 내겠습니다.
아래에 코드를 읽고 출력되는 값을 맞춰보세요
#include <iostream>
using namespace std;
void myDouble(int x)
{
x *= 2;
}
void myTriple(int *x)
{
*x *= 3;
}
void myQuadriple(int& x)
{
x *= 4;
}
int main()
{
// pass by value
int a1 = 1;
myDouble(a1);
cout << a1 << endl;
// pass by reference
int a2 = 1;
myTriple(&a2);
cout << a2 << endl;
// pass by address
int a3 = 1;
myQuadriple(a3);
cout << a3 << endl;
return 0;
}
1을 두배하고
1을 세배하고
1을 네배 했으니까
2, 3, 4일까요?
결과는 끝에 있습니다.
궁금하신 분은 보고 오셔도 좋으나
설명을 듣고 보시는 것을 추천드립니다.
여기서 머릿속으로 아래에 3가지를 다시한번 읽어봅니다.
- 값에 의한 전달 (pass by value)
- 주소에 의한 전달 (pass by address)
- 참조에 의한 전달 (pass by reference)
그리고 정의를 읽어주시면 됩니다.
값에 의한 전달 (pass by value)
- 복사된 값을 전달
- 값을 수정해도 원본에 영향을 주지 않음
주소에 의한 전달 (pass by address)
참조에 의한 전달 (pass by reference)
- 메모리 주소를 전달
- 함수가 직접 함수를 호출하는 참조값을 활용
- 값을 수정하면 원본 데이터에 영향을 줌
궁금한 분만 보는 내용
주소에 의한 전달 (pass by address) 과 참조에 의한 전달 (pass by reference)
필자는
- CPP 에서 pass by address는 procedural 이나 modular 한 코드를 monolithic 하게 바꿔준다 생각함
- CPP 에서 pass by address는 규모가 큰 코드에 활용하기 불편함
- 크거나 재귀가 많은 코드는 pass by reference를 활용함
전문가의 더욱더 정확한 정의는 하단에 Stackoverflow를 참조하면 좋음
틀리거나 오류가 있는 부분은 댓글에 지적바람
코드 분해해서 보기
값에 의한 전달 (pass by value)
void myDouble(int x)
{
x *= 2;
}
int main()
{
// pass by value
int a1 = 1;
myDouble(a1);
cout << a1 << endl;
}
참조에 의한 전달 (pass by reference)
void myTriple(int *x)
{
*x *= 3;
}
int main()
{
// pass by reference
int a2 = 1;
myTriple(&a2);
cout << a2 << endl;
}
주소에 의한 전달 (pass by address)
void myQuadriple(int& x)
{
x *= 4;
}
int main()
{
// pass by address
int a3 = 1;
myQuadriple(a3);
cout << a3 << endl;
}
결과
1, 3, 4
처음 배우시는 분들은 위에 코드를 직접 타이핑 해보고 실행해보시면 더욱더 좋습니다.
오늘도 즐거운 코딩하시길 바랍니다 ~ :)
참조 및 인용
(passing by reference and passing by address 에 대해서 더 깊게 알고 싶은 분은 아래 참조)
https://www.educative.io/edpresso/pass-by-value-vs-pass-by-reference
'C++ > C++ 기타' 카테고리의 다른 글
C++ 실행중에 이중배열 크기를 정의 하고 사용하는 한가지 방법 (1) | 2021.07.02 |
---|---|
C++ 동적으로 배열 크기를 늘리는 세가지 방법 (1) | 2021.06.21 |
배열을 함수에 인자로 보낼때 알아야 하는 한가지 (1) | 2021.06.15 |
C++ 과 C에서 화살표 함수 -> 와 .의 차이에 대해서 알아보겠습니다 (1) | 2021.06.09 |
Visual Studio Install 비쥬얼 스튜디오 설치하는 법 (1) | 2021.06.04 |