온백의 코딩 블로그

온백의 비밀 기록방

Note/C language

C언어에서 함수에서 배열 반환하는 방법은? - 함수에서 배열 리턴하기

온백 hundred_100 2023. 4. 27. 22:30

계속 쓰고 싶다는 생각을 하고 있었는데 못 쓰고 있었네요..

이 주제가 거의 일주일을 밀릴 뻔한 주제라고....

 

이번 주제는 '함수에서 배열 리턴하기' 입니다.

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() 함수에 대해 알아보기

반응형