call by value, address, reference 차이점 정리
Call by Value (값 호출)
함수에 인자를 넘겨줄 때, 변수의 값을 넘겨준다.
#include<cstdio>
void swap(int a, int b) {
int tmp;
tmp = a;
a = b;
b = tmp;
printf("In func: a=%d, b=%d\n", a, b);
}
int main() {
int a=1;
int b=2;
printf("main: a=%d, b=%d\n", a, b);
swap(a, b);
printf("After func: a=%d, b=%d\n", a, b);
}
실행시켜보면, 함수를 빠져나왔을 때 값이 변하지 않았음을 확인할 수 있다.
즉 주소를 전달한 게 아니라 값만 함수에 전달했기 때문에 함수가 의도한대로 실행되지 않았으며,
이를 콜바이밸류라 한다.
Call by Address (주소로 전달)
이번에는 넘겨줄 때, 엠퍼센드 연산자를 이용하여 주소를 넘겨준다.
아래와 같이 함수에 주소를 넘겨주는 방식을 콜바이어드레스라 한다.
#include<cstdio>
void swap(int* a, int* b) {
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
printf("In func: a=%d, b=%d\n", *a, *b);
}
int main() {
int a=1;
int b=2;
printf("main: a=%d, b=%d\n", a, b);
swap(&a, &b);
printf("After func: a=%d, b=%d\n", a, b);
}
Call by Reference (참조로 전달) - C++ 문법
C++에서만 지원하기때문에 확장자가 c인 경우 안된다.
얘는 레퍼런스변수를 이해하면 된다.
#include<cstdio>
void swap(int& a, int& b) {
int tmp;
tmp = a;
a = b;
b = tmp;
printf("In func: a=%d, b=%d\n", a, b);
}
int main() {
int a=1;
int b=2;
printf("main: a=%d, b=%d\n", a, b);
swap(a, b);
printf("After func: a=%d, b=%d\n", a, b);
}
'CS > C++' 카테고리의 다른 글
문자와 숫자 간 변환법(char to int, int to char) (0) | 2022.07.22 |
---|---|
floor, ceiling 등 함수를 쓰지 않고 반올림 간단하게 구현하기 (0) | 2022.07.22 |
lvalue와 rvalue의 이해, 증감연산자와 앰퍼센드 연산자 (0) | 2022.07.19 |
STL sort 함수 사용법 (0) | 2022.07.19 |
scanf 사용시 버퍼에 남은 linefeed 처리 (0) | 2022.07.14 |
댓글