Language/C, C++

[C] 함수 인자로 배열 전달

Phulasso 2020. 12. 20. 09:53

배열을 통째로 함수의 인자로 전달하는 것은 불가능하다. 그러나 배열을 함수의 인자로 전달하면 배열 시작점의 주소값이 전달 되기 때문에 함수의 매개변수를 포인터 변수로 선언하면 포인터 변수를 이용하여 배열에 접근할 수 있다.

#include <stdio.h>

void ShowArrayElem(int * param, int len)
{
    for(int i = 0; i<len; i++){
        printf("%d ", param[i]);
    }
    printf("\n");
}

int main(void)
{
    int arr1[] = {1,2,3};
    int arr2[] = {4,5,6,7,8};
    ShowArrayElem(arr1, sizeof(arr1)/4);
    ShowArrayElem(arr2, sizeof(arr2)/4);
    return 0;
}

/* output : 
1 2 3 
4 5 6 7 8
*/

 

#include <stdio.h>

void ShowArrayElem(int * param, int len)
{
    for(int i = 0; i<len; i++){
        printf("%d ", param[i]);
    }
    printf("\n");
}

void AddArrayElem(int * param, int len, int add)
{
    for(int i = 0; i < len; i++)
    {
        param[i] += add;
    }
}

int main(void)
{
    int arr[3] = {1,2,3};
    AddArrayElem(arr, sizeof(arr)/4, 1);
    ShowArrayElem(arr, sizeof(arr)/4);

    AddArrayElem(arr, sizeof(arr)/4, 2);
    ShowArrayElem(arr, sizeof(arr)/4);
    return 0;
}
/* output : 
2 3 4 
4 5 6
*/

위 코드와 같이 주소 값만 알면 배열에 저장된 값의 변경도 가능하다.

 

배열을 함수의 인자로 전달받을 때는 다음과 같은 선언도 가능하다. int * param과 동일한 의미이다.

void ShowArrayElem(int param[], int len)