C언어/문법

[C] 2차원 배열

Jawy 2024. 2. 21. 16:57

 

C언어로 코딩을 하다가, 문자열들의 배열을 만들 일이 있었다.

 

그런데 생각해보니 C언어에서는 문자열 자체가 문자들의 배열이라서, 문자열들의 배열은 2차원 배열로 구현해야 한다는 점을 깨달았다.


C언어에서 2차원 배열을 구현하는 방식이 한 가지는 아닌 것 같다. 

 

우선 가장 직관적인 방법으로 구현을 해보겠다.

 

우선 정수의 2차원 배열,

  1 #include <stdio.h>
  2
  3 int main(){
  4     char ary[3][3] = {{1,2,3}, {4,5}, {6}};
  5     for (int i = 0; i < 3; i++){
  6         for (int j = 0; j < 3; j++){
  7             printf("%d", ary[i][j]);
  8         }
  9         printf("\n");
 10     }
 11     return 0;
 12 }

 

다음은 문자열들의 배열이다.

  1 #include <stdio.h>
  2
  3 int main(){
  4     char ary[3][3] = {"abc", "de", "f"};
  5     for (int i = 0; i < 3; i++){
  6         for (int j = 0; j < 3; j++){
  7             printf("%c", ary[i][j]);
  8         }
  9         printf("\n");
 10     }
 11     return 0;
 12 }

 

크게 다른 것은 없고, 그저 배열을 표시하는 방식이 {1, 2, 3}이냐 "abc"냐의 차이 뿐이다.

 

위 방식에서처럼 2차원 배열을 만들어주면, 직관적이고 편한 것 같지만, 막상 코드에서 활용하려 해보니 불편한 경우가 많았다.

 

행의 크기와 열의 크기를 모두 미리 지정해두어야 하기 때문이었다.


 

앞선 포스팅에서 배열을 포인터를 이용해서 구현하는 방법을 알아보았다.

 

포인터 변수를 선언하고, 그 포인터 변수는 배열의 시작 주소값이었다.

 

해당 원리를 이용하여 2차원 배열을 구현할 수 있다.

  1 #include <stdio.h>
  2
  3 int main(){
  4     char* ary[3] = {"Hi my name is Jerry", "Hello world!", "2-Dimension array"};
  5     for (int i = 0; i < 3; i++){
  6         printf("%s\n", ary[i]);
  7     }
  8     return 0;
  9 }

 

위 코드를 보면, 크기 3의 포인터 배열을 생성해주었다.

 

각각의 포인터 변수는 배열의 시작 주소를 가리키기 때문에, 우리는 세 문자열을 저장한 2차원 배열을 얻게 되었다.

 

앞서 ary[][] 형태로 구현하였을 때와 비교했을 때 현재의 방법이 가지는 장점은 무엇일까?

 

바로 포인터 형태이기 때문에 문자열의 크기를 제한하지 않아도 된다는 점이다.

 

그렇다면 단점은? .. 아직은 모르겠다!

 

앞으로 코딩을 해가며 다양한 상황들을 맞닥뜨려보아야할 것 같다.

'C언어 > 문법' 카테고리의 다른 글

[C] 표준 라이브러리 <stdlib.h>  (0) 2024.02.20
[C] <stdio.h>의 표준 입출력 함수  (1) 2024.01.15
[C] _CRT_SECURE_NO_WARNINGS  (0) 2024.01.15
[C] 동적 메모리 할당  (0) 2024.01.12
[C] 포인터와 배열 간의 관계  (1) 2024.01.11