[10-10] 다음과 같은 정수형 배열이 지역변수로 선언되어있다.
int data[10] = { 56, 75, 450, 7, 340, 44, 120, 5, 20, 30 };
data 배열을 func() 함수에 전달하여 배열 원소의 합과 평균을 출력시키는 프로그램을 작성하려고 한다. 이떄 func() 함수 호출 시 실인수로 배열과 배열 원소의 수를 자식함수에게 전달하여 활용한다.
1. 전처리부와 main() 함수
#include <stdio.h>
#include <stdlib.h>
int main()
{
int data[10] = { 56, 75, 450, 7, 340, 44, 120, 5, 20, 30 };
int* ptr;
ptr = func(data, sizeof(data) / sizeof(data[0])); // 배열의 시작 주소를 return 받으면
printf("배열의 합 : %d, 평균 : %d", *ptr, *(ptr + 1));
return 0;
}
문제에 주어진 배열을 선언한다. 그리고 int형 포인터변수 ptr을 선언해 함수의 결과를 저장한다. 이때 함수의 실인수로 data 배열의 시작 주소와 data배열의 원소 개수를 전달해준다.
2. func() 함수
int* func(int* ptr, int count)
{
int i;
int info[2];
info[0] = 0;
for (i = 0; i < count; i++)
{
info[0] += *(ptr + i);
}
info[1] = info[0] / count;
return info;
}
for loop를 돌리기 위한 정수 i를 선언한다. 이 문제에서는 2개의 값을 return하는 효과를 내야하기 때문에 return할 값을 배열에 저장하고 배열의 주소를 return했다.
info라는 배열에 합과 평균을 저장한다. info[0]에 합을 저장하고, info[1]에 평균을 저장한다. 그리고 info 배열의 시작주소인 info를 반환해 ptr에 저장한다.
그리고 main 함수에서 *ptr과 *(ptr + 1)을 출력한다.
이 문제에서 함수에서 배열을 다루는 것에 대한 이해가 생겼다. func() 함수에서 배열의 주소를 return 해줬는데, 나는 return하면 배열의 원소들이 사라진다고 생각해서 static info를 써야한다고 생각했다. 하지만 info 배열의 시작주소를 return 해주면 그 배열의 원소들까지 같이 ptr에 저장되어서 굳이 static을 쓸 필요가 없었다!!!