ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3차원 배열
    C언어 2020. 7. 13. 06:09

    3차원 배열이란

    2차원 배열에서 더 나아가 한 종류의 배열을 더 가진 배열이다.

     

    1차원이 단순히 나열 즉 가로만 있었다면, 2차원은 가로 세로, 3차원은 가로, 세로, 높이까지 가지고 있다.

     

    예를 들어 4각형을 기준으로 2차원 배열은 평면인 사각형이라면 3차원 배열은 3D로 된 사각형이다.

    3차원 배열 만드는 법

    3차원 배열은 자료형 + 배열 이름 + [높이][세로크기][가로크기]; 형식으로 만든다.

     

    중괄호가 많이 쓰이기 때문에 주의해야 한다.

     

    자료형 배열이름[높이][세로크기][가로크기] = { 
        {
            { 값, 값, 값 },
            { 값, 값, 값 }
        }, 
        {
            { 값, 값, 값 },
            { 값, 값, 값 }
        }
    }

     

    #include <stdio.h>
    
    int main(void){
      int scores[2][3][5] = { //자료형 + 배열명 + [높이]+[세로길이]+[가로길이]
      {
      {99, 90, 95, 93, 91},
      {85, 89, 81, 83, 87},
      {72, 74, 76, 77, 78}
    },
    {
      {60, 64, 62, 67, 68},
      {52, 53, 57, 58, 56},
      {42, 44, 46, 47, 48}
      }
    };
    
    printf("%d\n", scores[0][1][2]); // 81출력.
    printf("%d\n", scores[1][1][2]); // 57출력.
    }

    3차원 배열 요소에 값 저장하기

    #include <stdio.h>
    
    int main(void){
      int scores[2][3][5];
      
      scores[0][0][0] = 90;
      scores[0][0][1] = 90;
      scores[0][0][2] = 90;
      scores[0][0][3] = 90;
      scores[0][0][4] = 90;
      
      scores[0][1][0] = 90;
      scores[0][1][1] = 90;
      scores[0][1][2] = 90;
      scores[0][1][3] = 90;
      scores[0][1][4] = 90;
      
      scores[0][2][0] = 90;
      scores[0][2][1] = 90;
      scores[0][2][2] = 90;
      scores[0][2][3] = 90;
      scores[0][2][4] = 90;
      
      scores[1][0][0] = 90;
      scores[1][0][1] = 90;
      scores[1][0][2] = 90;
      scores[1][0][3] = 90;
      scores[1][0][4] = 90;
      
      scores[1][1][0] = 90;
      scores[1][1][1] = 90;
      scores[1][1][2] = 90;
      scores[1][1][3] = 90;
      scores[1][1][4] = 90;
      
      scores[1][2][0] = 90;
      scores[1][2][1] = 90;
      scores[1][2][2] = 90;
      scores[1][2][3] = 90;
      scores[1][2][4] = 90;
    }

     

    3차원 배열의 가로, 세로, 높이 구하기

    #include <stdio.h>
    
    int main(void){
      int scores[2][3][5] = {
      {
      {99, 90, 95, 93, 91},
      {85, 89, 81, 83, 87},
      {72, 74, 76, 77, 78}
    },
    {
      {60, 64, 62, 67, 68},
      {52, 53, 57, 58, 56},
      {42, 44, 46, 47, 48}
      }
    };
    
    int all = sizeof(scores); 
    // 120출력: (4바이트*30개) 3차원 배열이 가진 공간의 크기 
    int one = sizeof(scores) / sizeof(int); 
    // 30출력: (120바이트/4바이트) 3차원 배열 내 요소들의 갯수
    int heigh = sizeof(scores) / sizeof(scores[0]);  
    // 2출력: (120바이트/60바이트) 면의 갯수, 3차원 배열의 크기 / 한 면의 크기
    int row = sizeof(scores[0]) / sizeof(scores[0][0]); 
    // 3출력: (60바이트 / 20바이트) 가로줄의 갯수, 한 면의 크기 / 한 줄의 크기
    int column = sizeof(scores[0][0]) / sizeof(int); 
    // 5출력: (20바이트 / 4) 세로줄의 갯수, 한 줄의 크기 / 요소 한개의 크기
    
    printf("%d\n", all);
    printf("%d\n", one);
    printf("%d\n", heigh);
    printf("%d\n", row);
    printf("%d\n", column);
    }

     

    3차원 배열의 포인터

    3차원 배열을 포인터에 할당할 경우 

     

    "자료형 + (*포인터명)[세로줄의 크기][가로줄의 크기]"로 선언하면 된다.

     

    #include <stdio.h>
    
    int main(void){
      int scores[2][3][5] = {
      {
      {99, 90, 95, 93, 91},
      {85, 89, 81, 83, 87},
      {72, 74, 76, 77, 78}
    },
    {
      {60, 64, 62, 67, 68},
      {52, 53, 57, 58, 56},
      {42, 44, 46, 47, 48}
      }
    };
    
    int (*point)[3][5] = scores;
    // 자료형 + (*포인트명)[세로길이]][가로길이]
    
    printf("%p\n", point); //0x7ffc6c05f820 출력.
    printf("%p\n", *point);//0x7ffc6c05f820 출력.
    printf("%p\n", *scores);//0x7ffc6c05f820 출력.
    printf("%p\n", &scores);//0x7ffc6c05f820 출력.
    printf("%p\n", &point[0][0]);
    //0x7ffc6c05f820 출력. 모든 주소값이 같은 것으로 볼 때 
    //포인트된 초기값은 [0][0][0]에 맞춰져있다.
    printf("%p\n", &scores[0][0][0]);
    //0x7ffc6c05f820 출력. 모든 주소값이 같은 것으로 볼 때 
    //포인트된 초기값은 [0][0][0]에 맞춰져있다.
    
    printf("%d\n", point[0][0][0]); //99출력
    printf("%d\n", point[0][1][2]); //81출력
    printf("%d\n", point[1][1][2]); //57출력
    
    printf("%d\n", scores[0][0][0]); //99출력
    printf("%d\n", scores[0][1][2]); //81출력
    printf("%d\n", scores[1][1][2]); //57출력
    }
Designed by Tistory.