* 함수 호출 시 인수 전달 방식
- 값에 의한 호출 call by value
- 참조에 의한 호출 call by reference
* swap 함수
void swap(int x, int y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
}
* 값에 의한 호출
void swap(int x, int y);
int main(void)
{
int a = 100, b = 200;
printf("swap() 전 a = %d, b = %d, a, b);
swap(a, b);
printf("swap() 후 a = %d, b = %d, a, b);
return 0;
}
void swap(int x, int y)
{
int tmp;
printf(swap() x = %d, y = %d, x, y);
tmp = x;
x = y;
y = tmp;
printf(swap() x = %d, y = %d, x, y);
}
----실행 결과
swap() 전 a = 100, b = 200
swap() x = 100, y = 200
swap() x = 200, y = 100
swap() 후 a = 100, b = 200
=> C에서의 함수 호출은 '값에 의한 호출'
함수 매개변수로 변수의 값만 전달했기 때문에 원본 변수 자체를 변경 X
x, y 와 값은 바꿨지만 변수 a, b에는 전혀 영향을 못 끼침
* 참조에 의한 호출
원본이 직접 전달되어 호출된 함수 안에서 매개 변수 값을 수정하면 원래 변수가 똑같이 수정
void swap(int *px, int *py);
int main(void)
{
int a = 100, b = 200;
printf("swap() 전 a = %d, b = %d, a, b);
swap(&a, &b);
printf("swap() 후 a = %d, b = %d, a, b);
return 0;
}
void swap(int *px, int *py);
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
----실행 결과
swap() 전 a = 100, b = 200
swap() 후 a = 200, b = 100
- 주소를 받을 수 있는 자료형은 포인터!!
* 포인터를 반환
- 함수의 반환값으로 포인터가 사용될 수 있지만,
함수가 종료되더라도 남아 있는 기억 장소를 반환해야함
지역변수는 함수 호출이 종료되면 소멸되는 것을 기억!!!
댓글