본문 바로가기
문법관련/C

14.1 다차원 배열

by print_soo 2024. 8. 7.

다차원 배열의 형태

int score[3][4]라는 다차원 배열을 시각화하면 아래와 같다.

[    |    |    |    ]
[    |    |    |    ]
[    |    |    |    ]

배열명[i][j]은 배열요소가 j개짜리인 배열이 i개 있는 것과 같다.


다차원 배열의 주소

 100  104  108  112   
[    |    |    |    ]
 116  120  124  128   
[    |    |    |    ]
 132  136  140  144   
[    |    |    |    ]

다차원 배열의 요소

[  s[0][0]  |  s[0][1]  |  s[0][2]  |  s[0][3]  ]
[  s[1][0]  |  s[1][1]  |  s[1][2]  |  s[1][3]  ]
[  s[2][0]  |  s[2][1]  |  s[2][2]  |  s[2][3]  ]

다차원 배열의 초기화

int s[3][4] = {{1, 2, 3, 4},
               {5, 6, 7, 8},
               {9, 10, 11, 12}
              }
              
[  1  |  2  |  3  |  4  ]
[  5  |  6  |  7  |  8  ]
[  9  |  10  |  11  |  12  ]

int s[3][4] = {{1},
               {5, 6},
               {9, 10, 11, 12}
              }
              
[  1  |  0  |  0  |  0  ]
[  5  |  6  |  0  |  0  ]
[  9  |  10  |  11  |  12  ]

int s[3][4] = {{1, 2, 3, 4, 5, 6 , 7}
              
[  1  |  2  |  3  |  4  ]
[  5  |  6  |  7  |  0  ]
[  0  |  0  |  0  |  0  ]

또한 초기화를 할 때 다차원 배열에서 i는 생략가능하다. (배열명[i][j])

→ 한 배열당의 요소 개수는 필수로 필요하지만 총 배열의 개수는 유동적이기 떄문에

// i를 채워 놓은 것
int s[3][4] = {{1, 2, 3, 4, 5, 6 , 7}
              
[  1  |  2  |  3  |  4  ]
[  5  |  6  |  7  |  0  ]
[  0  |  0  |  0  |  0  ]

// i를 비워 놓은 것
int s[][4] = {{1, 2, 3, 4, 5, 6 , 7}
              
[  1  |  2  |  3  |  4  ]
[  5  |  6  |  7  |  0  ]

행의 개수 구하기

행의 개수 == 총 배열의 요소 수 / 한 배열의 요소 수

행의 개수 == 12 / 4 == 3

이것을 메모리적으로 구하면 

행의 개수 == sizeof(s) / sizeof(s[0])

2차원 char 배열

char s[5][10];

[    |    |    |    |    |    |    |    |    |    ]
[    |    |    |    |    |    |    |    |    |    ]
[    |    |    |    |    |    |    |    |    |    ]
[    |    |    |    |    |    |    |    |    |    ]
[    |    |    |    |    |    |    |    |    |    ] 

2차원 char 배열 초기화

char s[5][10] = {{'d', 'o', 'g', '\\0'},
                 {'r', 'a', 'b', 'b', 'i', 't'}
                 {'t', 'i', 'g', 'e', 'r'},
                 "horse"}
                 
                 
 
[  d  |  o  |  g  |  \\0  |    |    |    |    |    |    ]
[  r  |  a  |  b  |  b  |  i  |  t  |  \\0  |    |    |    ]
[  t  |  i  |  g  |  e  |  r  |  \\0  |    |    |    |    ]
[  h  |  o  |  r  |  s  |  e  |  \\0  |    |    |    |    ]
[    |    |    |    |    |    |    |    |    |    ]                  
                 

만약 저 상황에서 첫번 쨰 배열의 dog를 cat으로 바꾸고 싶다면 어떻게 해야할까?

//틀린 방법(x)

s[0] = "cat";

//옳은 방법(o)

strcpy(s[0], "cat")

3차원 배열

int s[2][3][4];

// -> 4개의 요소를 가진 배열이 3개있는 다차원 배열이 2개있는 3차원 배열이다. 

s[0][0][0]            s[1][0][0]
[    |    |    |    ] [    |    |    |    ]
[    |    |    |    ] [    |    |    |    ]
[    |    |    |    ] [    |    |    |    ]

'문법관련 > C' 카테고리의 다른 글

14.2 포인터 배열  (0) 2024.08.07
13. 변수  (0) 2024.07.04
12.2 문자열 연산함수  (0) 2024.06.27
12.1 문자열과 포인터  (0) 2024.06.26
11.3 getchar(), putchar()  (0) 2024.06.26