이번 포스팅에서는 인수 호출 방법에 대해 다루어 봤습니다.
인수 호출 방법은 기본적으로 2가지가 있는데요.
1. 값에 의한 호출 방법(일반적인 사용)
2. 참조에 의한 호출 방법(포인터 활용)
1번의 경우 일반적으로 코딩을 처음 배웠을 때 사용하는 방법으로 값을 직접 넣는 형태입니다.
2번의 경우 배열 이후 포인터를 배움으로써 주소에 대한 개념을 익히고 포인터를 활용하여 간접적으로 값을 넣는 형태입니다.
/* 인수 전달 방법
1. 값에 의한 호출(call by value)
2. 참조에 의한 호출(call by reference)
*/
#include <Stdio.h>
void swap(int x, int y); // 값에 의한 호출 이용
void swap2(int *px, int *py); // 참조에 의한 호출 이용
int main(void)
{
int a = 100, b = 200;
swap(a, b); // 값에 의한 호출
swap2(&a, &b); // 참조에 의한 호출
swap(a, b); // 값에 의한 호출
return 0;
}
void swap(int x, int y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
printf("a: %d b: %d\n", x, y);
}
void swap2(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
printf("a: %d b: %d\n", *px, *py);
}
무언가 다르다는 것을 발견하셨는지요?
void swap()은 값에 의한 호출이고,
void swap2()는 참조에 의한 호출(포인터 활용)인데요.
둘을 번갈아가며 실행해보니 값에 의한 호출의 경우 반환값이 없어서 기존 값에 영향을 안주는 반면
참조에 의한 호출은 포인터를 통해 값을 간접적으로 호출하여 기존 값을 반환하지 않아도 영향을 준다는 특징을 보였습니다.
포인터를 왜 쓰는가? 싶었는데, 이러한 위의 특징을 활용하면
기존 값에 의한 호출은 return으로 값을 하나밖에 반환하지 못하지만,
참조에 의한 호출은 return을 굳이 사용하지 않고도 여러 개의 값을 함수를 통해 반환할 수 있다는 장점이 있네요.
그럼 오늘도 즐거운 코딩!!
반응형
'코딩 | 개념 정리 > C' 카테고리의 다른 글
[C언어] 2차원 배열의 각 행과 열의 합계 구하기 (0) | 2021.05.15 |
---|---|
[C언어] 배열_0~9까지 난수 100번 생성 후 가장 많이 나온 수 구하기 (0) | 2021.05.15 |
[C언어] 포인터, 배열의 원소를 역순으로 출력하기 (0) | 2021.04.29 |
[C언어] 포인터와 배열에서 포인터의 장점은? (0) | 2021.04.29 |
[C언어] 배열 요소 복사하기 (0) | 2021.04.29 |