CS/C

[2021W C프로그래밍과 실습][연습문제 10-10] 정수 포인터형을 return하는 함수를 작성해 합과 평균 구하기

아이스얼그레이 2022. 2. 9. 22:23

[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을 쓸 필요가 없었다!!!