2차원 배열 매개변수로 사용할 때 문법 문의

조회수 4740회

1) 2차원 배열을 함수의 매개변수 사용시, 가로 크기를 명시해야 한다는데 왜 그런가요...? 2) 보통 다음과 같이 배열 크기를 알려주는 col과 row 값을 따로 받던데, 배열크기 5를 생략할 수 있지 않나요? 3) row 값이 6이면... 함수도 int arr[][6]으로 매번 수정해야 하나요?

ex)

void print2DArray(int arr[][5], int col, int row)    
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            printf("%d ", arr[i][j]);
        }

        printf("\n");
    }
}
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • type arr[32];
    
      arr        arr+1     arr+2
       .__________.__________.__________.__________.__
       |          |          |          |          |
       .__________.__________.__________.__________.__
        \___  ___/
             v   
         sizeof(type)
    
    
    int arr[32][4];
    
     &(arr[0])  &(arr[1])  ..
      arr        arr+1     arr+2
       .__________.__________.__________.__________.__
       |          |          |          |          |
       .__________.__________.__________.__________.__
        \___  ___/
             v   
         sizeof(int[4])
         = 4*sizeof(int)
    
    

    이렇게 되요. 그런데, 함수호출 인자로 넘어가면, 배열변수는 포인터값만 넘어가기 때문에 호출된 쪽에서는 배열의 요소를 접근할 때 얼마만큼의 단위로 포인터연산을 해야할 지 모릅니다. 그래서, 다차원배열일 때에, 최상위 배열의 크기는 생략하더라도, 하위배열의 크기는 생략할 수 없는 겁니다.


    2019-04-10 추가

    배열의 크기가 다른 2차원 배열에 사용할 수 있는 함수 예제입니다.

    
    int print_array(int *arr, int n_row, int n_col)
    {
        int i, j;
        for (i = 0; i < n_row; i++)
        {
            for (j = 0; j < n_col; j++)
            {
                printf("%d\t", *(arr + i*n_col + j));
            }
            printf("\n");
        }
        printf("----------------\n");
        return 0;
    }
    
    int main()
    {
        int a[2][2] = { {0, 1}, {2, 3} };
        int b[4][3] = {
            {0, 0, 0}, {1, 1, 1}, {2, 2, 3}, {3, 3, 4} 
        };
    
        print_array((int*)a, 2, 2);
        print_array((int*)b, 4, 3);
        return 0;
    }
    
    • 헛 그렇군요... 그러면 void print2DArray(int arr[][5], int col, int row) 함수는 하위배열이 크기가 5일 때만 사용이 가능한가요....? 모든 크기의 2차원 배열을 print 할 수 있는 함수는 못만드나요..? 알 수 없는 사용자 2019.4.10 00:21

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)