계속 쓰고 싶다는 생각을 하고 있었는데 못 쓰고 있었네요..
이 주제가 거의 일주일을 밀릴 뻔한 주제라고....
이번 주제는 '함수에서 배열 리턴하기' 입니다.
C언어에서 코딩을 하다보면 가끔씩 배열을 리턴받아야 하는 상황이 생기기도 합니다.
예를 들어 정렬 알고리즘이 그렇죠.
기껏 함수에 코드 다 짜뒀더니 return arr;에서 문제가 생기거나 합니다.C언어가 1972년에 만들어진 언어라 배열 리턴이 안될 리가 없을 것 같은데,계속 실패하니 없을 것도 같고..
저만 해본 생각은 아닐 거라 생각해 잊어버리기 전에 빨리 올려보려 합니다.전문성이 약간 떨어질 순 있으나 도움이 되었으면 좋겠네요 ㅎㅎ
함수에서 배열 리턴(반환)받는 방법은?
사실 그 방법은 의외로 간단합니다.
'return을 사용할 필요가 없습니다.'
'아니 반환을 할 때 사용하는 것이 return인데 출구없이 나갈 수 있다는 얘긴가요?'
라는 생각을 할 수 있습니다.
사실 함수에 배열이 주어질 때 포인터 표시(*)를 안해도 자동으로 포인터로 넘어갑니다.
즉, main함수에 있는 배열과 매개변수로 들어간 배열 둘 다 같은 저장소를 이용한다는 것이죠.
#include <stdio.h>
void swap_arr(int arr[])
{
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
int main()
{
int arr[2] = { 0 };
scanf("%d %d", &arr[0], &arr[1]);
swap_arr(arr);
printf("%d %d", arr[0], arr[1]);
return 0;
}
main에서의 배열이 다른 함수에 포인터로 받아진다는 것이 놀랍게도 사실입니다.
arr[0]과 arr[1]의 값은 swap_arr() 함수 안에서만 바꼈지만 main함수의 arr의 값에도 영향을 미쳤습니다.
(원래 각 함수의 지역 변수들은 이름이 같아도 다른 변수인 것 아시죠? ㅎㅎ)
포인터에 대해 약간 설명하자면,
각 변수들이 값을 저장하려면 컴퓨터 저장공간 중 일부를 쓰게 되는데
그 변수가 저장된 위치, 주소값을 받는 변수입니다.
저장소를 공유하는 같은 변수라는 거죠.
2023.03.26 - [Note/C language] - 'C언어'로 "알림창" 띄우기! - "메시지 박스" MessageBox() 사용법
2023.02.28 - [Diary/코딩 잡 지식] - 코딩 'C언어'에서 "함수" 사용법 쉽게 알려드립니다! - 함수 겉핥기
2023.01.22 - [Note/C language] - [C언어] "배열 길이 ( 변수 크기) 구하기!" sizeof() 함수에 대해 알아보기
'Note > C language' 카테고리의 다른 글
[C, C++, C#] "bool"타입은 뭘까? - "boolean"에 대해 간단하게 알아보기 (1) | 2023.05.29 |
---|---|
'C언어'로 "알림창" 띄우기! - "메시지 박스" MessageBox() 사용법 (0) | 2023.03.26 |
[C언어] "배열 길이 ( 변수 크기) 구하기!" sizeof() 함수에 대해 알아보기 (4) | 2023.01.22 |
입출력, printf()와 scanf() / int main이랑 return 0, <stdio.h>가 뭐야? (+ scanf 오류 해결법!) [ (0) | 2022.12.04 |