C언어 2차원 array 사용 방법 예제
이번 글에서는 C언어에서 2차원 배열을 선언하는 방법과 주요 특징을 먼저 살펴본 뒤,
값에 접근, 수정 및 출력하는 과정을 다루어보고
2차원 배열의 특수 케이스인 문자열(string) 배열에 대해서까지 말씀드려보도록 하겠습니다.
2차원 배열 선언, 특징
C언어에서 2차원 이상의 다차원 배열 선언 방법은
자료형 변수명 [1차 배열 크기][2차 배열 크기]... = {값} 형식으로 코드를 작성해주시면 됩니다.
아래는 2 * 3 크기의 int 2차원 배열과 3 * 4 크기의 double 2차원 배열을 선언한 예시입니다.
#include <stdio.h>
int main(){
/* [[1, 2, 3],
[4, 5, 6]] 꼴의 2차원 정수 배열 */
int arr1 [2][3] = {
{1, 2, 3},
{4, 5, 6}
};
/* [[0.1, 0.2, 0.3, 0.4],
[1.0, 2.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0]] 꼴의 2차원 정수 배열 */
double arr2 [3][4] = {
{0.1, 0.2, 0.3, 0.4},
{1, 2, },
{}
};
}
값을 적어주지 않은 자리는 기본적으로 0으로 채워지는 것도 확인해볼 수 있었습니다.
참고로, 위 방법으로 2차원 배열 선언 시 array 내 모든 값의 자료형은 1가지로 통일되어야하며,
내부 배열들의 크기도 모두 일치해야 합니다.
([[1], [1, 2], [1, 2, 3]] 같이 크기가 다른 내부 배열이 섞인 상태 선언은 불가능합니다.)
위 방법 말고도 포인터 형태 혹은 동적 할당을 이용한 방법으로도 2차원 배열 선언이 가능합니다.
다만, 이 글에서는 해당 방법 설명은 생략하며, 이는 추후 포스팅에서 다루어보도록 하겠습니다.
2차원 배열 값 접근, 수정 및 출력
값에 접근하기
이중 인덱싱을 통하여 2차원 배열 내 특정 위치 값을 쉽게 추출할 수 있습니다.
인덱스 번호는 0부터 시작한다는 점에 유의하며, 값 접근 결과 예시를 아래에서 확인해보세요.
#include <stdio.h>
int main(){
int arr1 [2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// 배열 내 각 원소 값 추출 결과 확인
printf("%d\n", arr1[0][0]); // 1
printf("%d\n", arr1[0][1]); // 2
printf("%d\n", arr1[0][2]); // 3
printf("%d\n", arr1[1][0]); // 4
printf("%d\n", arr1[1][1]); // 5
printf("%d\n", arr1[1][2]); // 6
}
인덱싱 시 인덱스의 범위가 초과되지 않도록 유의해주시길 바랍니다.
값 수정하기
C언어에서 다차원 array 내 각 값에 대하여 저장된 값을 변경하는 과정을 지원합니다.
인덱싱 위치 = 변경할 값 형태로 재선언을 해주시면 해당 위치 값이 수정됩니다.
아래 예시에서 [0][0] 위치의 값을 바꾼 결과를 확인해보세요.
#include <stdio.h>
int main(){
int arr1 [2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// 변경 전
printf("%d\n", arr1[0][0]); // 1
arr1[0][0] = 100;
// 변경 후
printf("%d\n", arr1[0][0]); // 100
}
배열 출력하기
내부 배열 전체를 한번에 출력하는 것은 어렵지만,
각 원소 출력 방법을 통하여 다중 for문으로 배열의 형태를 적당히 유지하며 출력할 수 있습니다.
아래는 2중 for문을 통하여 배열을 통째로 출력한 예시 코드입니다.
#include <stdio.h>
int main(){
int arr1 [2][3] = {
{1, 2, 3},
{4, 5, 6}
};
printf("["); // 첫 열림 괄호 출력
for(int i = 0; i < 2; i++){
printf("{"); // 내부 배열 열림 괄호 출력
// 각 원소 출력
for(int j = 0; j < 3; j++){
printf(" %d ", arr1[i][j]);}
printf("}"); // 내부 배열 닫힘 괄호 출력
// 마지막 줄이면 닫힘 괄호 출력, 아니면 줄바꿈만 출력
if(i != 1){
printf("\n");
}else{
printf("]\n");
}
}
}
위 코드에서는 외부 배열 괄호는 [], 내부 배열 괄호는 {}으로 구분해 보았습니다.
이에 대한 출력 결과는 아래와 같았습니다.
문자열(string) 배열 예시
C언어에서 문자열 자체를 하나의 char 자료형의 배열로 볼 수 있으므로,
문자열들을 모은 배열은 char 자료형의 2차원 배열로 취급할 수 있습니다.
먼저, C언어에서 문자열을 다루는 방법이 궁금하시다면 아래의 글을 참고하세요.
각 자리에 최대 10글자의 문자열을 4개를 저장할 수 있는 string 배열을 선언한
예시 코드는 아래와 같습니다.
#include <stdio.h>
int main(){
char arr3[4][10] = {"hello!", "hi!", "apple",};
printf("%s\n", arr3[0]); // hello!
printf("%s\n", arr3[1]); // hi!
printf("%s\n", arr3[2]); // apple
printf("%s\n", arr3[3]); // 빈 문자열 출력
}
이 경우, 선언 시 비워둔 자리는 null 문자(\0)로 채워지게 됩니다.
이중 인덱싱을 통하여 각 글자를 추출 및 수정하는 것 또한 가능합니다.
#include <stdio.h>
int main(){
char abc[4][10] = {"hello!", "hi!", "apple",};
// 특정 위치의 글자만 추출하여 출력
printf("%c\n", abc[0][0]); // h
// 특정 위치 글자 변경
abc[0][0] = 'j';
// 변경 결과 확인
printf("%s\n", abc[0]); // jello!
}
'C & C++' 카테고리의 다른 글
C++ 스타일의 for문(범위 기반 for문) : 배열, 문자열, 벡터 순회 예제 (0) | 2022.04.20 |
---|---|
[C언어] while문 반복문 예제 : 기본 사용법, continue/break, do~while문, for문과의 용도 차이 (0) | 2022.04.12 |
[C언어] 문자열 선언 방법 정리(배열, 포인터) (0) | 2022.04.05 |