/* 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는 함수 호출 시 주소가 매개변수로 전달되어, 함수 내에서 참조 타입(*간접참조연산자)의 매개 변수를 이용하여 실인자의 값을 변경 할 수 있다.
'Embedded System > 소프트웨어 (C,C++)' 카테고리의 다른 글
[F/W] 메모리 영역 (스택, 힙) (0) | 2023.08.24 |
---|---|
[F/W] 펌웨어와 부트로더(BootLoader) (0) | 2023.08.23 |
[Arduino] Wire 라이브러리 (0) | 2023.04.19 |
[C/C++] 이상형 월드컵 (ideal_worldCup) (0) | 2023.04.06 |
[Arduino] Servo 라이브러리 (0) | 2023.04.06 |