배열을 함수의 매개변수로 사용하기
반응형

배열을 매개변수로 하는 함수 선언 방법

배열을 함수의 매개변수로 사용하기 위해서는 다음과 같이 선언할 수 있습니다.

int sum (int arr[]); 
int sum (int *ptr);

하나는 일반적인 매개변수 선언과 같이 배열(arr[])로 선언하였고 다른 하나는 포인터 변수(*ptr)로 선언하였습니다. 

배열의 값을 함수의 매개변수로 사용하는 예제

#include<stdio.h>

void giveMeArray(int a);

int main()
{
    int myArray[] = { 2, 3, 4 };
    giveMeArray(myArray[2]);        //myArray[2]의 값 변수로 전달
    return 0;
}

void giveMeArray(int a)
{
    printf("%d", a);
}

OUTPUT
4

배열에 저장된 두 번째 인덱스의 값을 함수로 전달하는 예제입니다. 오직 하나의 값을 받기 때문에 함수의 매개변수는 int a로 선언되었습니다.

배열 자체를 함수의 매개변수로 사용하는 예제

참조에 의한 호출(call by reference)과 같이 배열의 메모리상의 주소를 매개변수로 받아 사용합니다.  호출부에서는 배열명을 넘기고 호출된 함수에는 호출부에서 넘어온 배열의 주소를 받습니다.

배열명 자체는 배열의 시작 주소입니다. 변수명이 메모리 주소의 이름인 것과 같이 배열명 자체도 배열이 시작되는 주소를 가리키고 있습니다. 즉 int marks[] 선언되고 초기화되었을 때 marks 자체는 배열의 시작 주소라고 생각하시면 됩니다.

#include<stdio.h>

float findAverage(int marks[]); 

int main() 
{ 
    float avg; 
    int marks[] = {99, 90, 96, 93, 95}; 
    avg = findAverage(marks);       // 배열명을 인수로 전달 
    printf("Average marks = %.1f", avg); 
    return 0; 
} 

float findAverage(int score[])  
{ 
    int i, sum = 0; 
    float avg; 
    for (i = 0; i <= 4; i++) { 
        sum += score[i]; 
    } 
    avg = (sum / 5); 
    return avg; 
} 

OUTPUT 
94.6 

함수의 매개변수를 int score[]와 같이 선언하여 전달된 배열의 주소를 받게 됩니다. 결국, 함수호출 부의 marks 배열과 함수의 score 배열은 같은 배열입니다.

함수에 다차원 배열을 전달하는 예제

#include<stdio.h>

void displayArray(int arr[3][3]); 

int main() 
{ 
    int arr[3][3], i, j; 
    printf("배열에 입력할 9개의 숫자를 입력하세요: \n"); 
    for (i = 0; i < 3; ++i) 
    { 
        for (j = 0; j < 3; ++j) 
        {     
            scanf("%d", &arr[i][j]); 
        } 
    } 
    // 배열명을 인수로 전달 
    displayArray(arr); 
    return 0; 
} 

void displayArray(int num[3][3]) 
{ 
    int i, j; 
    printf("저장된 배열은: \n"); 
    for (i = 0; i < 3; ++i) 
    { 
        // 행 바꿈 문자 추가 
        printf("\n"); 
        for (j = 0; j < 3; ++j) 
        {        
            // 값 출력시 \t 탭문자로 공백 추가 
            printf("%d\t", num[i][j]); 
        } 
    } 
} 

OUTPUT 
배열에 입력할 9개의 숫자를 입력하세요: 
1 
2 
3 
4 
5 
6 
7 
8 
9 
The complete array is: 
1 2 3 
4 5 6 
7 8 9 


일차원 배열과 마찬가지로 배열명을 함수로 전달합니다. 하지만 주의할 점은 위의 예제의 int num[3][3]와 같이 호출부의 배열과 같은 크기로 매개변수를 선언해야 합니다. 

함수에서 배열 리턴

함수에서 배열을 리턴해야 할 때는 사용 시 주의를 요구합니다. 그 이유는 함수가 종료되면 함수 내에 정의된 배열을 포함한 모든 변수가 사라지기 때문입니다.

간혹가다 배열을 리턴해야할 경우에는 아래의 코드와 같이 배열을 매개변수로 받아 값을 수정하고 배열 자체를 리턴할 수 있습니다. 이렇게 함으로서 함수가 종료된 후에도 배열이 사라지지 않기 때문입니다.

int* sum (int x[]) 
{ 
    // statements 
    return x ; 
} 

배열을 리턴하므로 함수의 리턴타입은 포인터(int*)로 정의해야 합니다.

<< 다음 혼자 공부하는 C언어 이전 >>
반응형