함수에는 배열과 같이 복잡한 데이터형도 사용 가능하다. 매개변수로 배열을 받아야 하는 경우도 있을 것이다. 그럴때는 이렇게 쓴다.
int Sum_Arr(int arr[], int arrSize)
{
...
}
이렇게 사용하면 Sum_Arr의 첫 번째 매개변수를 마치 배열을 뜻하는 것처럼 보인다 하지만 실상은 포인터다.
int Sum_Arr(int arr[], int arrSize);
int main()
{
int numbers[8] = { 6,2,7,1,8,2,5,3 };
int sum = Sum_Arr(numbers, 8);
cout << sum << endl;
}
int Sum_Arr(int arr[], int arrSize)
{
int sum = 0;
for (int i = 0; i < arrSize; i++)
{
sum += arr[i];
}
return sum;
}
코드에서 배열의 매개변수를 배열 이름 그대로 numbers라고 주었다. 전에 배웠듯이 배열의 이름은 배열 첫 번째 원소의 주소랑 같다. 즉 numbers == &numbers[0] 이다. 따라서 Sum_Arr은 주소를 전달 받는 것이다. 그래서 다음과 같이 써도 상관이 없다.
int Sum_Arr(int * arr, int arrSize)
{
...
}
이는 반대의 입장으로는 불가능하다. 만약 포인터를 전달 받을 때면, 위와 같은 코드만 가능하다.
int Sum_Arr(const int arr[], int arrSize)
{
...
}
매개변수 자료형 앞에다가 const 제한자를 붙이면 그 원본 값을 바꿀 수 없다. 이를 어길려고 할 시 에러가 나온다.