ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C] 배열②
    C 2023. 4. 11. 00:29

     

     

    이차원과 삼차원 배열


     

     

    이차원 배열

    • 2차원 배열은 테이블 형태의 구조
    • 행(row)과 열(column)의 구조로 표현

     

    이차원 배열선언

    • 2개의 대괄호 필요
    • 첫 번째 대괄호 : 배열의 행(row) 크기 지정
    • 두 번째 대괄호 : 배열의 열(column) 크기 지정
    • 배열선언 시 초기값을 저장하지 않을 경우 반드시 행과 열의 크기를 명시하여야 한다.
    • 배열 크기는 리터럴 상수, 매크로 상수 또는 그들의 연산식이 허용된다.
    • 배열 크기로 변수와 const 상수를 사용 할 수 없다.
    • 배열원소의 자료형으로 모든 기본 자료형(정수형, 실수형, 나열형, 무치형)을 사용할 수 있다.
    # 배열 선언 시 배열크기는 생략할 수 없으며,
    # 배열 크기는 리터럴 상수, 매크로 상수 또는 그들의 연산식이 허용된다.
    
    원소자료형 배열이름[행 크기][열 크기];
    #define RSIZE 5
    #define CSIZE 2
    
    int score[RSIZE][CSIZE];
    
    double point[2][3];
    char ch[5][80];
    float grade[7][CSIZE];

     


     

    이차원 배열 구조

    • 이차원 배열에서 각 원소를 참조하기 위해서는 2개의 첨자가 필요
    • 행 첨자는 0에서 (행 크기 - 1)까지 유효
    • 열 첨자는 0에서 (열 크기 - 1)까지 유효
    • 배열 선언 int arr [2][3];  
      • arr [0][0]으로 첫 번째 원소를 참조  
      • 두번째 원소는 arr [0][1] = arr [0][0] + 1 × 4byte  
      • 두 번째 행의 첫 항목인 네 번째 원소는 td[1][0]으로 행 첨자가 1 증가
    • 행 우선 (row major)  배열
      • 행을 먼저 배치하는 특징
        • 첫 번째 행의 모든 원소가 메모리에 할당된 이후
        • 두 번째 행의 원소가 순차적으로 할당
    int arr[2][3] → # 총 원소 수(행 크기×열 크기) : 2 × 3 = 6개 
    
    arr[0][1] = arr [0][0] + 1 × 4byte
    arr[0][2] = arr [0][0] + 2 × 4byte
    
    arr[1][0] =  arr [0][0] + 3 × 4byte = 3 × 4byte + 1 × 4byte
    
    arr[1][2] = 3 × 4byte × 2 + 3 × 4byte
    int arr[5][7] → # 총 원소 수(행 크기×열 크기) : 5 × 7 = 35개
    
    arr[0][2] = arr[0][0] + 2 × 4byte
    
    arr[2][3] = 7 × 4byte × 2 + 4 × 4byte = 7 × 4byte × 2 + (arr[0][0] + 3 × 4byte)
    
    arr[3][0] = 7 × 4byte × 3 + 1 × 4byte
    
    arr[4][0] = 7 × 4byte × 4 + 1 × 4byte
    
    arr[4][6] = 7 × 4byte × 5

     

     


     

    2차원 배열 원소 참조

    • 외부 반복 제어변수 i
      • 행을 0에서 (행의 수 - 1)까지 순차적으로 참조
    • 내부 반복 제어변수 j
      • 0에서 (열의 수 - 1)까지 열을 순차적으로 참조
    • 배열원소의 저장 값이 행과 열의 관계식으로 만들 수 있다면 출력과 같이 중복된 반복문을 사용하여 값을 저장할 수 있다.
    for (int i = 0; i < ROWSIZE; i++)
    {
            for (int j = 0; j < COLSIZE; j++)
                printf("%d ", arr[i][j]);
            puts("");
    }
    for (int i = 0; i < ROWSIZE; i++)
            for (int j = 0; j < COLSIZE; j++)
                arr[i][j]) = i * COLSIZE + j + 1;

     

     


     

    이차원 배열 선언 초기화

    • 이차원 배열을 선언하면서 초기값을 지정하는 방법은 중괄호를 중첩되게 이용하는 방법과 일차원 배열 같이 하나의 중괄호를 사용하는 방법이 있다.
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    
    int arr[2][3] = {1, 2, 3, 4, 5, 6};
    
    int arr[][3] = {1, 2, 3, 4, 5, 6};
    • 첫 번째 대괄호 내부의 행의 크기는 명시하지 않을 수 있다.
      • 두 번째 대괄호 내부의 열의 크기는 반드시 명시
        • 행 크기는 명시하지 않고 열 크기만 명시한다면 명시된 배열원소 수와 열 크기를 이용하여 행의 크기를 자동으로 산정
    • 2차원 배열에서도 초기값이 총 배열원소 수보다 적게 주어지면 나머지는 모두 기본값이 0, 0.0 또는 '\0'이 저장

     


     

    3차원 배열

    • 대괄호 내부 세 개의 크기는 모두 필요하다.
    int arr[2][2][3];	# 총 2 × 2 × 3 = 12개 원소의 3차원 배열
    
    arr[0][0][0] = 1;	# 첫 번째 원소
    arr[0][0][1] = 1;	# 두 번째 원소
    arr[0][0][2] = 1;	# 세 번째 원소
    arr[0][1][0] = 1;	# 네 번째 원소
        ···
    arr[1][1][2] = 1	# 열두 번째(마지막) 원소

     


     

    배열크기 연산

    • 연산자 sizeof를 이용한 식 (sizeof(배열이름) / sizeof(배열원소))
      • 저장공간의 크기를 byte 수로 반환하는 연산자 sizeof
    • sizeof(배열이름) : 배열의 전체 공간의 byte 수
    • sizeof(배열원소) : 배열원소 하나의 byte 수
    # 배열크기(배열원소 수) = sizeof(배열이름) / sizeof(배열원소)
    
    int arr[] = {1, 2, 3, 4, 5}
    
    int arraysize = sizeof(arr) / sizeof(arr[0]);
    
    sizeof(arr) = 20 byte
    sizeof(arr[0]) = 4 byte

     


     

    2차원 배열크기 계산방법

    • 2차원 배열의 행의 수 : (sizeof(배열이름) / sizeof(배열이름[0]))       
    • 2차원 배열의 열의 수 : (sizeof(배열이름[0]) / sizeof(배열이름[0][0]))      
      • sizeof(배열이름) : 배열의 전체 공간의 byte 수
      • sizeof(배열이름[0]) : 첫 행의 byte 수
      • sizeof(배열이름[0][0])) : 첫 번째 원소의 byte 수
    # 배열 전체 크기 sizeof(arr) : 48
    
    # 배열의 전체 원소 수 : 12
    sizeof(arr) / sizeof(arr[0][0])
    
    # 배열의 행 수 : 4
    sizeof(arr) / sizeof(arr[0])
    
    # 배열의 열 수 : 3
    sizeof(arr[0]) / sizeof(arr[0][0])

     

     

     

     

     

    'C' 카테고리의 다른 글

    [C] 재귀함수와 라이브러리 함수  (0) 2023.04.13
    [C] 함수  (0) 2023.04.13
    [C] 배열①  (0) 2023.04.05
    [C] 반복  (0) 2023.04.03
    [C] 연산자② - 관계와 논리, 조건과 비트연산자  (0) 2023.04.01
Designed by Tistory.