글
(1) Call - by - Value
: 가장 일반적인 함수 호출의 형태로 기본 호출 방식은 값의 복사이다. 따라서 값에 의한 호출이라고 한다.
- 함수를 호출하면서 해당 인자값을 파라미터로 넘겨주게 된다. 이때 그 인자값에 복사가 일어나 넘어가게 되고,
호출받은 함수는 해당 인자값을 처리하는데, 그 과정에서 값에 변화가 일어나도 복사된값이기 때문에
호출한 쪽의 변수값은 변하지 않는다.
● Example Source
#include<stdio.h>
#include<conio.h>
int swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
printf("a : %d\n", a);
printf("b : %d\n", b);
return 0;
}
int main()
{
int val1=10;
int val2=20;
swap(val1, val2);
printf("val1 : %d \n", val1);
printf("val2 : %d \n", val2);
getch();
return 0;
}
- 이 swap이라는 함수는, 함수 내부에서, 두 변수가 지니고 있는 값을 서로 바꿔줍니다.
- 소스를 main함수부터 분석해 보면, val1과 val2라는 변수를 만들과, 10과 20으로 값을 초기화 했습니다.
- 그리고, swap함수로 들어가, Call - by -value를 이용해, 값이 a와 b라는 매개 변수로 복사가 됩니다.
- 그리고, temp라는 변수를 보조로 만들어 주어, temp에게, a의 값을 가지게 한뒤, a의 값은 b의 값으로, b의 값은, temp의
값으로 바꿉니다.
- 그렇게 되면, 결과적으로, a와 b의 값은 서로 바뀌게 된 셈이죠.
- a는 val1의 값을 복사 받았고, b는 val2의 값을 복사 받았으므로, 10과 20이 뒤바뀌어 a는 10이 되고, b는 20이 됩니다.
- 하지만, main함수의 val1과 val2변수는 어떨까요?? 값의 변화가 있을까요??? 아니죠!
- 이것이 바로, call - by - value가 가진 특성이라 말할 수 있습니다.
값이 복사된 변수와, 본래의 값을 가진 변수는, 남남이다.
(2) Call - by - Reference
: 포인터를 이용해, 배열을 인자로 전달하는것으로 참조에 의한 호출 이라고 한다.
- 함수를 호출하면서 해당 인자값을 파라미터로 넘겨주게 된다. 이때 그 인자값의 주소를 넘겨주고,
호출받은 함수는 해당 인자값을 포인터 변수로 받아 처리하는데, 그 과정에서 값에 변화가 일어나면
호출한 쪽의 변수값도 같이 변하게 된다.
● Example Source
#include<stdio.h>
#include<conio.h>
int swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
printf("a : %d\n", a);
printf("b : %d\n", b);
return 0;
}
int main()
{
int val1=10;
int val2=20;
printf("Before val1 : %d \n", val1);
printf("Before val2 : %d \n", val2);
swap(&val1, &val2);
printf("After val1 : %d \n", val1);
printf("After val2 : %d \n", val2);
getch();
return 0;
}
- 결과
※ 참조 : http://blog.naver.com/wns1112?Redirect=Log&logNo=46180955
'P rogramming > C Language' 카테고리의 다른 글
포인터의 const (0) | 2011.10.24 |
---|---|
ASCII(아스키) 코드표 (0) | 2011.10.21 |
argc & argv - Agument Count & Value (0) | 2011.09.29 |
#ifdef 와 #ifndef 전처리기 (0) | 2011.09.29 |
자료형 크기 정리 (0) | 2011.07.07 |
RECENT COMMENT