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 |