: any
[C/C++] Call by reference, Call by address, Call by value
geekylli
2021. 4. 15. 15:57
반응형
두 숫자를 바꿔주는 swap() 함수를 예제로 아래 세 가지를 알아보자.
- Call by reference
- Call by address
- Call by value --> 얘만 안되니까 얘부터 시작
Call by value
결과에 주목하세요. a와 b는 변경이 되지 않는다.
#include <stdio.h>
// call by value
void swap(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
}
int main() {
int a = 3;
int b = 7;
swap(a, b);
printf("swap(a, b) : [%d], [%d]\n", a, b);
return 0;
}
result
swap(a, b) : [3], [7]
Call by address
주소 값을 전달합니다.
함수에서는 포인터를 사용하여서 표연하여야 하고,
입력 받는 곳에서는 주소 참조연산자를 붙여야 한다.
** & : 주소 참조 연산자
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a = 3;
int b = 7;
swap(&a, &b);
printf("swap(a, b) : [%d], [%d]\n", a, b);
return 0;
}
result
swap(a, b) : [7], [3]
Call by reference
(only in C++, 참조연산자 사용 가능)
함수에서 값을 받을 때, 주소 참조 연산자를 사용하여 받습니다.
함수의 변수선언 부분의 의미는 주소를 '찾아가서, 해당 값을 읽으세요.'
#include <stdio.h>
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 3;
int b = 7;
swap(a, b);
printf("swap(a, b) : [%d], [%d]\n", a, b);
return 0;
}
result
swap(a, b) : [7], [3]
반응형