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 |
---|