1. 값에 의한 전달 (call by value)
먼저 예를 보고 설명을 하겠다.
- #include <iostream>
- using namespace std;
- void Swap(int a, int b);
- int main() {
- // your code goes here
- int firstNum = 5, secondNum = 8;
- Swap(firstNum, secondNum);
- cout << "firstNum is " << firstNum << endl;
- cout << "secondNum is " << secondNum << endl;
- return 0;
- }
- void Swap(int a, int b){
- int temp = a;
- a = b;
- b = temp;
- }
result:
firstNum is 5
secondNum is 8
보통 두 자료값을 ㄱ환할 때 자주 사용하는 것으로 Swap()이 있다.
Swap은 보통 16~20번 줄과 같은 형식을 가지고 있다.
결과 값으로 firstNum = 8, secondNum = 5를 예상했지만 바꾸기 전 그대로 5와 8이 나왔다.
그 이유는 함수를 호출할 때 변수 자체가 전달되는 것이 아니라 그 변수에 담긴 값이 전달되는 방식이기 때문이다. 이것을 call by value 라고 한다.
Swap()내에 5와 8 값을 각각 저장한다. 그리고 함수의 본체에 의해 a와 b의 값이 서로 바뀌어서 8, 5가 된다. 하지만 이것은 함수 내에서만 있는 일이다.
2. 주소에 의한 전달 (call by address)
- 변수의 주소 자체를 전달하는 주소에 의한 전달 방식
- #include <iostream>
- using namespace std;
- void Swap(int *a, int *b);
- int main() {
- // your code goes here
- int firstNum = 5, secondNum = 8;
- Swap(&firstNum, &secondNum);
- cout << "firstNum is " << firstNum << endl;
- cout << "secondNum is " << secondNum << endl;
- return 0;
- }
- void Swap(int *a, int *b){
- int temp = *a;
- *a = *b;
- *b = temp;
- }
result:
firstNum is 8
secondNum is 5
결과 firstNum와 secondNum의 값이 바뀐것을 볼 수 있다.
3. 참조에 의한 전달 (call by reference)
참조는 변수의 또 다른 이름이라고 할 수 있다. 즉 별명(alias)를 선언한다.
그러므로 참조를 만들려면 먼저 변수를 선언해야 한다. 그리고 참조의이름 앞에 &를 붙이면 참조를 만들 수 있다.
ex)
int firstNum;
int &numOne = firstNum;
이렇게 하면 변수 firstNum의 별명, 즉 참조가 numOne이 되는 것이다. 변수 firstNum와 참조 numOne은 같은 기억공간을 가리킨다.
참고로 참조를 선언할 때는 선언의 대상이 되는 변수로 초기화하면서 선언해야 한다.
int &numOne = firstNum; (O)
-------------------------------
int &numOne;
numOne = firstNum (X)
- #include <iostream>
- using namespace std;
- int main() {
- // your code goes here
- int firstNum = 10;
- int &numOne = firstNum;
- cout << "firstNum is " << firstNum << endl;
- cout << "numOne is " << numOne << endl;
- numOne = 20;
- cout << "firstNum is " << firstNum << endl;
- cout << "numOne is " << numOne << endl;
- return 0;
- }
firstNum is 10
numOne is 10
firstNum is 20
numOne is 20
'IT > C Language' 카테고리의 다른 글
다차원 배열 초기화 / 배열의 이름 (0) | 2014.12.19 |
---|---|
참조의 의한 전달2 (call by reference) (0) | 2014.12.19 |
template 함수 (0) | 2014.12.19 |
함수의 다형성(polymorphism) 1 (0) | 2014.12.19 |
C언어에서 알아야 할 것들 (0) | 2014.12.19 |