Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 함수로 배열 전달하는 방법 완벽 정리

C++에서는 배열 전체를 함수의 인수로 직접 전달하는 것이 허용되지 않습니다. 대신 배열 이름을 인덱스 없이 지정하여 배열에 대한 포인터를 전달할 수 있습니다.

1차원 배열을 함수의 인수로 전달하려면 아래 세 가지 방법 중 하나로 함수의 형식 매개변수(formal parameter)를 선언해야 합니다. 세 가지 선언 방식 모두 컴파일러에 정수 포인터가 전달된다는 사실을 알려주기 때문에 결과적으로 동일한 방식으로 처리됩니다.

방법 1: 포인터로 선언하기

형식 매개변수를 포인터로 선언하는 방법입니다.

void myFunction(int *param) {
    .
    .
    .
}

방법 2: 크기가 지정된 배열로 선언하기

형식 매개변수를 크기가 명시된 배열로 선언하는 방법입니다.

void myFunction(int param[10]) {
    .
    .
    .
}

방법 3: 크기가 지정되지 않은 배열로 선언하기

형식 매개변수를 크기 없이 배열로 선언하는 방법입니다.

void myFunction(int param[]) {
    .
    .
    .
}

실전 예제: 배열의 평균값 구하기

이제 배열과 함께 다른 인수를 받아, 배열에 담긴 숫자들의 평균을 반환하는 함수를 살펴보겠습니다.

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;
}

위 함수를 실제로 호출하는 전체 코드는 다음과 같습니다.

#include <iostream>
using namespace std;

// 함수 선언
double getAverage(int arr[], int size);

int main () {
    // 요소 5개를 가진 int 배열
    int balance[5] = {1000, 2, 3, 17, 50};
    double avg;

    // 배열에 대한 포인터를 인수로 전달
    avg = getAverage( balance, 5 ) ;

    // 반환된 값 출력
    cout << "Average value is: " << avg << endl;
    return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 출력됩니다.

Average value is: 214.4

결과에서 알 수 있듯이, 함수 입장에서는 배열의 길이가 중요하지 않습니다. C++는 형식 매개변수에 대해 별도의 범위 검사(bounds checking)를 수행하지 않기 때문입니다. 따라서 배열의 실제 크기를 함수가 알 수 있도록 위 예제처럼 배열 크기를 별도의 인수로 함께 전달하는 것이 일반적인 관례입니다.