c언어로 코드를 작성할 때, 함수에서 값을 여러 개 반환하고 싶으면 어떻게 해야 할까요?
파이썬에 익숙하신 분이라면 return 값을 ',(comma)'로 나열하여 반환하면 될 것으로 생각하시겠지만, c언어의 경우 해당 문법은 지원하지 않습니다!
그렇다면 c언어는 어떻게 할까요? 전달하지 않고 함수 안에서 값을 바꾸면 어떻게 되는지 확인해 보겠습니다.
반환값(return) 없이 매개변수를 교환하는 함수 작성
#include <stdio.h>
void swapNumber(int first, int second)
{
int temp;
temp = first;
first = second;
second = temp;
printf("[In function] %d %d\n", first, second);
}
int main()
{
int first = 10;
int second = 20;
swapNumber(first, second);
printf("[In main] %d %d\n", first, second);
return 0;
}
swapNumber()를 통해서 first와 second를 매개변수로 전달해주고, first에 존재하던 값은 temp에 잠시 저장 후, second에 존재하던 값을 first로 넣고 second에는 처음 first 값이 들어있던 temp 값을 넣어줌으로써 두 변수에 존재하던 값을 교환해주는 함수를 작성했습니다. 결과는 어떻게 나올까요?
output:
[In function] 20 10
[In main] 10 20
결과는 위와 같이 함수 안에서 출력한 값은 두 값이 교환된 상태이지만, 메인함수에서는 초기화 시켜준 값 그대로 출력됩니다. 즉, 매개변수는 값을 함수로 전달하는 역할만 할 뿐 함수 바깥의 변수에는 전혀 영향이 없습니다. 그렇다면 c언어에서는 두 개 이상의 값을 변경하지 못하는 걸까요? 정답은 포인터를 이용하면 됩니다.
포인터를 이용하여 매개변수 교환 함수 작성
#include <stdio.h>
void swapNumber(int* first, int* second)
{
int temp;
temp = *first;
*first = *second;
*second = temp;
printf("[In function] %d %d\n", *first, *second); // 값을 출력할 땐 '*' 이용
}
int main()
{
int first = 10;
int second = 20;
swapNumber(&first, &second); // '&'를 이용하여 주소를 매개변수로 전달
printf("[In main] %d %d\n", first, second);
return 0;
}
포인터를 사용하는 방법은 위와 같습니다. 함수의 매개변수 전달 시 '&'를 이용하여 주소를 전달해줍니다. 이 때 신경써야할 부분은 주소를 매개변수로 전달했기 때문에 함수 안에 first만 사용할 시에 이는 변수 주소를 뜻합니다. 해당 주소에 있는 값을 조작하고 싶을 땐 '*'를 이용하여 저장된 값으로 접근합니다.
output:
[In function] 20 10
[In main] 20 10
포인터를 이용하지 않았을 때의 결과와 달리 함수 안의 출력과 메인 함수에서의 출력이 동일함을 알 수 있습니다.
포인터를 이용한 함수 안에서의 연산
#include <stdio.h>
void mutipleNumber(int* first, int* second)
{
*first *= *second;
printf("[In function] %d\n", *first);
}
int main()
{
int first = 10;
int second = 20;
multipleNumber(&first, &second);
printf("[In main] %d\n", *first);
return 0;
}
매개변수를 포인터를 이용하여 전달하는 경우 함수안에서의 문법이 헷갈릴 수가 있습니다. 앞에서 언급했듯이 매개변수의 first와 second는 int*, 즉 주소이기 때문에, 값에 접근하고 싶은 경우에는 위의 코드와 같이 '*'를 사용합니다. 함수 안에서 first에 저장된 값은 second에 저장된 값을 곱해서 저장됩니다. 그렇기 때문에 위의 코드 결과 값은 아래와 같이 10에 20을 곱한 200이 출력됩니다.
output:
[In function] 200
[In main] 200
'공부 > 코딩 개념정리' 카테고리의 다른 글
[C++] String형을 int형으로 변환하기 (0) | 2021.11.13 |
---|---|
[Python] csv 파일 처리의 모든 것 (0) | 2021.05.01 |
[C++] 1차원, 2차원 벡터 초기화 (1D 2D vector initialization) (0) | 2021.03.17 |
[프로그래밍] 메모이제이션 이해하기 (0) | 2021.01.01 |
[shell programming] awk linux 명령어 이해하기 (0) | 2020.12.29 |
댓글