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)를 수행하지 않기 때문입니다. 따라서 배열의 실제 크기를 함수가 알 수 있도록 위 예제처럼 배열 크기를 별도의 인수로 함께 전달하는 것이 일반적인 관례입니다.