Call by.. what?
2021. 1. 14. 23:04ㆍProgramming Language/C · C++
Call by..
함수의 호출 방식은 크게 두가지가 있는데, 바로 Call by value와 Call by reference이다.
Call by value
인자로 받은 값을 복사한다. 단지 복사만 하는 것이기 때문에 원형은 바뀌지 않는다.
C
// C
#include <stdio.h>
void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
}
int main() {
int x = 10;
int y = 20;
printf("x = %d, y = %d\n", x, y);
swap(x, y);
printf("x = %d, y = %d\n", x, y);
return 0;
}
C++
// C++
#include <iostream>
using namespace std;
void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
}
int main() {
int x = 10;
int y = 20;
cout << "x = " << x << ", y = " << y << endl;
swap(x,y);
cout << "x = " << x << ", y = " << y << endl;
return 0;
}
Call by reference
인자로 받은 값을 주소를 참조한다. 참조로 받게 되면 원형이 바뀌게 된다.
// C++
#include <iostream>
using namespace std;
int main() {
int b = 10;
int &a = b;
a += 10;
cout << b << endl;
}
이때 a
는 b
의 이름표에 불과하다.
따라서 참조변수 a
는 실체가 없다. 참조변수 a
는 정의와 동시에 초기화 해 주어야 한다.
int& a;
int b = 10;
a = b;
이렇게 사용하면 다음과 같은 오류가 발생한다.
Call by reference의 swap은 어떨까?
C++
// C++
#include <iostream>
using namespace std;
void swap(int &x, int &y) {
int tmp = x;
x = y;
y = tmp;
}
int main() {
int x = 10;
int y = 20;
cout << "x = " << x << ", y = " << y << endl;
swap(x,y);
cout << "x = " << x << ", y = " << y << endl;
return 0;
}
Call by pointer
C는 Call by value밖에없다. 다른 언어처럼 참조로 전달은 불가하다. 주소를 직접 넘겨주는것은 굳이 부르자면 Call by pointer
라고 할 수 있다.
// C
#include <stdio.h>
void swap(int* x, int* y) {
int tmp = *x;
*x = *y;
*y = tmp;
}
int main() {
int x = 10;
int y = 20;
printf("x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("x = %d, y = %d\n", x, y);
return 0;
}
반응형
'Programming Language > C · C++' 카테고리의 다른 글
[C/C++] EOF (0) | 2020.09.04 |
---|