본문 바로가기

강의자료/C/C++

046. 2차배열을 함수의 인자로 전달하자.


◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


// 2차 배열을 함수의 인자로 전달하기.
// 1. int (*stu)[MAX] : int[MAX]타입의 주소를 가지는 포인터 변수 선언. -> int stu[][MAX]와 동일하다.
// 2. int* stu[MAX] : int*타입을 요소로 가지는 MAX크기의 배열 선언.

#include  
using namespace std;

#define MAX 4

int total(int sub[], int num);
double ave(int sub[], int num);
//void print(int (*stu)[MAX], int row, int col)
void print(int stu[][MAX], int row, int col);

char subject[][5]={"국어", "영어", "수학", "C++"};
void main( )
{ 
	//5학생 4과목 점수  
	int student[][MAX]={{100, 90,80,95},{97, 98, 99, 87},{100, 98,78,98},{78, 89,76, 98},{90, 100, 87, 86}};
	//cout << sizeof(student) << "  " << sizeof(student[0]) << endl;
	int row = sizeof(student) / sizeof(student[0]);				//학생수 
	int col = sizeof(student[0]) / sizeof(student[0][0]);		//과목수 
	
	print(student, row, col);

	// 모두 같은 주소.
	cout << student << endl;
	cout << student[0] << endl;
	cout << &student[0][0] << endl;
}

int total(int sub[], int num)
{
	int tot=0;
	for(int i=0; i < num; i++)
	{
		tot+= sub[i];        
	}
	return tot;       
}
double ave(int sub[], int num)
{
	return total(sub, num) / (double)num;       
}
void print(int stu[][MAX], int row, int col)
{
	cout << "번호\t"; 
	for(int i=0; i < col; i++)
	{
		cout << subject[i] << "\t";           
	}
	cout << "총점\t" << "평균" << endl;
	for(int j=0; j < row; j++)
	{
		cout << (j+1) << "\t";
		for(int k=0; k < col; k++)
		{
			cout << stu[j][k] << "\t";  
		}
		cout << total(stu[j], col) << "\t";    
		cout << ave(stu[j], col) << endl;   
	}  
}