/*****
함수에 배열을 전달하거나 포인터 관리하기
*****/
# include <stdio.h>
//함수 선언 부분
//void Func(int _arr[5][5]);
//void PrintArray1D(int _arr[5]);
//void PrintArray2D(int _arr[5][5]);
void PrintArray1D(int _arr[] , int _len);
void PrintArray2D(int _arr[][5], int _len);
void Func(int _arr[5][5]);
////////////////////
////////////////////
////////////////////
////////////////////
//함수 정의 부분
void Func(int _arr[5][5])
{
int col = 0, row = 0;
//세로 //가로
for (col = 0; col < 5; ++col)
{
for (row = 0; row < 5; ++row)
{
printf("%d ", _arr[col][row]);
}
printf("\n");
}
}
//void PrintArray1D(int* _arr)
//void PrintArray1D(int _arr[])
void PrintArray1D(int _arr[] , int _len) //배열의 길이도 매개변수로 받는다.
{
printf("_arr Size : %d byte\n", sizeof(_arr)); //포인터는 4바이트
int cnt = 0;
for (cnt = 0; cnt < _len; ++cnt)
printf("%d ", _arr[cnt]);
printf("\n");
}
//
//void PrintArray1D(int _arr[5])
//{
//
// int cnt = 0;
// for (cnt = 0; cnt < 5; ++cnt)
// printf("%d ", _arr[cnt]);
//
// printf("\n");
//
//
//}
//void PrintArray2D(int _arr[5][5])
//void PrintArray2D(int _arr[5][5]) //매개변수 정보 2개를 다 제공하고있음.
void PrintArray2D(int _arr[][5] , int _colcnt)
{
int col = 0, row = 0;
//세로 //가로
for (col = 0; col < _colcnt; ++col)
{
for (row = 0; row < 5; ++row)
{
printf("%d ", _arr[col][row]);
}
printf("\n");
}
}
//{
//
// int col = 0, row = 0;
// //세로 //가로
//
// for (col = 0; col < 5; ++col)
// {
// for (row = 0; row < 5; ++row)
// {
// printf("%d ", _arr[col][row]);
// }
// printf("\n");
//
//
// }
//
//
//}
//메인 함수
int main(void)
{
int arr[5][5] = {
{ 11 , 12, 13 , 14, 15 },
{ 21 , 22, 23 , 24, 25 },
{ 31 , 32, 33 , 34, 35 },
{ 41 , 42, 43 , 44, 45 },
{ 51 , 52, 53 , 54, 55 },
};
int arr1D[5] = { 1,2,3,4,5 };
//int arr2D[5][5]
int arr2D[3][5] = {
{ 11 , 12, 13 , 14, 15 },
{ 21 , 22, 23 , 24, 25 },
{ 31 , 32, 33 , 34, 35 },
//{ 41 , 42, 43 , 44, 45 },
//{ 51 , 52, 53 , 54, 55 },
};
//int arr2[3][2] = { 0, };
//Func(arr);
//Func(arr2);
//int arr2[5][5] = arr; //요렇겐 못들어감. 배열을 초기화하는 부분이죠.
//얘값으론 초기화를 못해요. 그 이유는 arr는 포인터라서. 배열의 이름이라서.
//자 그러면, 얘를 그러면 포인터로 저장하면 되겠느냐?
//int** pArr = arr; //요래도 워닝이 뜬다. 2차원 배열을 만들어서 2차원 포인터에 전달하고싶어하는건데.
//워닝이 뜬거죠. 더블포인터에 포인터는 받아졌는데 정보가 부족해서.. 무슨 말이냐면 지금 우리가
int* pArr1D = arr1D;
//PrintArray1D(pArr1D);
int* pArr1D2 = arr1D; //C에서는 대입 불가
PrintArray1D(pArr1D , sizeof(arr1D)/ sizeof(int)); // 뭐시기 , 자료형의 크기만큼을 나눠야 개수가 나옴.
int** pArr2D = arr2D;
//PrintArray2D(pArr2D);
PrintArray2D(pArr2D , 3);
PrintArray2D(pArr1D, 70);
/*
int col = 0, row = 0;
//세로 //가로
for (col = 0; col < 5; ++col)
{
for (row = 0; row < 5; ++row)
{
printf("%d ", _arr[col][row]);
}
printf("\n");
} //요렇게하면 출력도 안되고 메모리 뻗음. 이유는? 함수에 있는건 출력이 되고 여기에 있는건 왜 출력이 안되는가?
//주소값만 저장했지. 가로갯수를 몰라서 뻗는거임. 옵셋값을 몰라서 ...
//세로갯수는 []이렇게해도 가로갯수를 []이렇게 적으면 뻗는다. 가로갯수가 반드시 필요하다 즉 옵셋값을 반드시 알아야한다.
**/
//PrintArray2D(pArr2D);
return 0;
}
댓글 0