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

함수의 인자로 배열을 전달하는 방법을 소개합니다.

1. 배열의 Pointer를 전달하는 방법

아래와 같이 배열의 포인터를 함수에 전달하면 함수 안에서 배열에 접근할 수 있습니다. 배열의 길이를 알 수 없기 때문에, 길이도 인자로 전달해야 합니다.

#include <iostream>

double getAverage(int* arr, int size) {
    int i, sum = 0;
    double avg;

    for (i = 0; i < size; ++i) {
        sum += arr[i];
    }
    avg = double(sum) / size;

    return avg;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};

    int size = sizeof(arr) / sizeof(*arr);
    double avg = getAverage(arr, size);
    std::cout << "Average: " << avg << std::endl;

    return 0;
}

Output:

Average: 3

int* arr 대신에 int arr[]를 사용하여 동일 내용을 구현할 수 있습니다.

#include <iostream>

double getAverage(int arr[], int size) {
    int i, sum = 0;
    double avg;

    for (i = 0; i < size; ++i) {
        sum += arr[i];
    }
    avg = double(sum) / size;

    return avg;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};

    int size = sizeof(arr) / sizeof(*arr);
    double avg = getAverage(arr, size);
    std::cout << "Average: " << avg << std::endl;

    return 0;
}

Output:

Average: 3

2. 배열의 Reference를 전달하는 방법

배열의 Reference를 함수에 전달할 수 있습니다. 아래와 같이 template을 사용하면 배열 길이를 인자로 전달하지 않아도 됩니다.

#include <iostream>

template<typename T, size_t N>
double getAverage(T (&arr)[N]) {
    int i, sum = 0;
    double avg;

    for (i = 0; i < N; ++i) {
        sum += arr[i];
    }
    avg = double(sum) / N;

    return avg;
}


int main() {
    int arr[] = {1, 2, 3, 4, 5};

    double avg = getAverage(arr);
    std::cout << "Average: " << avg << std::endl;

    return 0;
}

Output:

Average: 3
Loading script...
codechachaCopyright ©2019 codechacha