Call by.. what?

2021. 1. 14. 23:04Programming Language/C · C++

Call by..

함수의 호출 방식은 크게 두가지가 있는데, 바로 Call by valueCall 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;
}

이때 ab이름표에 불과하다.
따라서 참조변수 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