2010. 7. 10. 02:16

제 25장 다차원 배열

  


※ 포인터, 배열은 무엇인지를...잘 숙지해야 합니다.
    ->> 더블포인터를 위한 공부를 위해서 집중하세요
        >> 포인터 개념이 이해가 안되시면 다시 포인터/배열부분 강의를
              한번 더 공부하고 오시기 바랍니다.


다차원 배열이란? ; 2차원 이상의 배열

 - 배열 선언 예)
   
   int arr[5];             // 1차원 구조
   int arr1[10][6];     // 2차원 구조
   int arr2[4][4][5];  // 3차원 구조

 ※ 2차원배열만 이해를 한다면 나머지 2+n 차원 배열이 이해가 빨라요
    tip => 2차원 이상은 실제 쓰일 경우가 거의 없습니다.

 

 


2차원 배열의 선언

  - 2차원적 메모리를 구성

 

 ex)

 int main()
{
 arr1[4]; 
 arr2[3][4]; // 3은 세로, 4는 가로를 의미라고 생각
                  // 3 X 4 인 배열 선언
 ......           // 배열크기는 3x4(12)x4byte = 48 byte

 return 0;
}

 

예제)=============================================================  

 

/* 2차원 배열 요소의 접근 방법 */

 

#include <stdio.h>

int main()
{
 int arr[3][3];
 arr[0][0] = 1;
 arr[1][0] = 2;
 arr[2][0] = 3;

                                                         
 ....

}     // 참고 : 배열 ; 상수포인터

      // 그림 : 예제이해

 

 

 

예제)=============================================================  


#include <stdio.h>

int main(void)
{
 int Array[4][2];
 int i, j;

 int number;

 for(i=0; i<4; i++)
 {
  for(j=0; j<2; j++)
  {
   printf("%d 층 %d호 인구입력 : ", i+1, j+1);
   scanf("%d", &Array[i][j]);
  }
 }

 for(i=0; i<4; i++)
 {
  number = 0;

  for(j=0; j<2; j++)
  {
   number += Array[i][j];
  }

 printf("%d 층, 총인구 : %d \n", i+1, number);

 }

 return 0;
}

================================================================  

 

 

 

다차원 배열의 실제 메모리 구성
 
 - 접근 방법을 2차원적으로 해석할뿐, 1차원 배열과 동일하다.

 

 - 2차원배열이라고해서 메모리구조는 2차적으로 되는것이 아니다.
    >> 배열선언시 2차원배열선언시, 1차원적인 배열메모리를 생각하세요
 


 - 그림참고(배열선언시 메모리구조의 모습)

 

 

 

2차원 배열 ! 선언과 동시에 초기화

 

 - 방법 1 : 행 단위로 모든 요소들을 초기화

 

 - 방법 2 : 행 단위로 일부 요소들만 초기화
   
 ex 1)

int Array[3][3] = {
 
 {1, 2, 3},
 {3, 4, 5},
 {5, 6, 7}

}


 ex 2)

int Array_1[3][3] = {

{0},       // 나머지 Array_1[0][1], Array_1[0][2]는 0으로 초기화
{1, 2},   // 나머지 Array_1[1][2]는 0으로 초기화 
{4, 5, 6}

}


 ex 3)

int Array_2[3][3] = {1, 2, 3, 4, 5, 6}; // 이렇게 해도 문법적으로 문제 없다


 

초기화 리스트에 의한 배열 크기의 결정

 

 - 1차원 배열의 예
  >> int Array[] = {1, 2, 3}; // 정상 OK

 

 - 2차원 배열의 예
  >> int Array[][] = {1, 2, 3, 4, 5, 6}        // Error!
  >> int Array[][4] = {1, 2, 3, 4, 5, 6, 7, 8} // OK
  >> int Array[][2] = {1, 2, 3, 4, 5, 6, 7, 8} // OK

 

   ===> 두개의 인덱스 모두를 생략할 수는 없다.
           둘 중에 한개의 인덱스만 선언해주면 컴파일러가 자동으로 인덱스를 인식한다.
 


3차원 배열의 선언과 의미

 

  - 3차원적 메모리를 구성(있다는것만 아시면 되요)

 

  - 일반적으로 거의 쓰이지 않는다.(배열과 포인터를 이용하기 위한 용도만...)

 

  - 4차원 이상은 4차원형태이므로 구조적인 이해가 불가

 
 

 
Posted by 토실토실천재