IT/솔루션) 난 정말C... 없다구요

24장. 배열과 포인터, 포인터 연산) 문제 24-5 [2차원 배열 포인터의 선언과 활용]

돔찌 2019. 4. 18. 18:21

<2016. 9. 26. 21:17>

24장. 배열과 포인터, 포인터 연산) 문제 24-5 [2차원 배열 포인터의 선언과 활용]

 

/*
가로 세로의 길이가 각각 3인 int형 2차원 배열의 주소 값을 두 개 전달 받아서,
배열에 저장된 값의 총 합이 더 큰 배열의 주소값을 반환하는 함수를 정의해보자.
그리고 main 함수에서는 반환된 주소 값을 이용해서 총 합이 더 큰 배열에 저장된 모든 정수들을 출력하도록 정의하자.
다음은 이 문제에 해결에 사용될, 그리고 함수의 인자로 전달될 배열들이다.
int arr1[3][3] = {{3,2,1},{6,7,2},{5,1,9}};
int arr2[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
*/
#include<stdio.h>
#include<stdlib.h>
int CompareArr(int(*arr1)[3], int(*arr2)[3]);
int main(void) {
	int arr1[3][3] = { {
			3,2,1
		}
		, {
			6,7,2
		}
		, {
			5,1,9
		}
	}
	;
	int arr2[3][3] = { {
			1,2,3
		}
		, {
			4,5,6
		}
		, {
			7,8,9
		}
	}
	;
	int(*resultarr)[3];
	int result;
	int i, j;
	resultarr = CompareArr(arr1, arr2);
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			printf("%4d", resultarr[i][j]);
		}
		printf("\n");
	}
	system("pause");
	return 0;
}
int CompareArr(int(*arr1)[3], int(*arr2)[3]) {
	int i, j;
	int sum1 = 0, sum2 = 0;
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			sum1 += arr1[i][j];
		}
	}
	printf("arr1의 총합은 %d \n", sum1);
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			sum2 += arr2[i][j];
		}
	}
	printf("arr2의 총합은 %d \n", sum2);
	if (sum1 >= sum2)
	  return (int *)arr1; else
	  return (int *)arr2;
}