반응형
2차원 배열이란?
1차원 배열이 한방향으로 길이가 있는 형태라면
2차원 배열은 가로, 세로 길이가 있는 배열이라고 생각하면 됩니다!
int arr[3][3]; // 가로, 세로 길이가 각각 3인 2차원 int형 배열
3차원 배열이란?
3차원 배열은 가로, 세로, 높이의 길이가 있는 배열이라 생각하면 됩니다.
int arr[3][3][3]; // 가로, 세로, 길이가 각각 3인 3차원 int형 배열
N차원 배열
물론 메모리 구조상으로는 N차원배열은 전부 일렬로 연속되어 있고,
N차원 배열은 포인터로도 취급이 가능하다.
2차원 배열선언
2차원 배열의 선언 방식은 아래의 코드와 같습니다.
type arr[세로 길이][가로 길이];
아래의 표는 해당 2차원 배열의 요소를 표로 표현한 것입니다.
int arr[3][4];
열 행 |
1열 | 2열 | 3열 | 4열 |
1행 | [0][0] | [0][1] | [0][2] | [0][3] |
2행 | [1][0] | [1][1] | [1][2] | [1][3] |
3행 | [2][0] | [2][1] | [2][2] | [2][3] |
2차원 배열의 메모리상 할당
출력결과를 보면 알 수 있듯이 N차원배열의 메모리 공간은 전부 일렬로 연속되어있다.
int arr[2][3];
int i, j;
for(i=0; i<2; i++)
for(j=0; j<3; j++)
printf("%p \n", &arr[i][j]);
return 0;
/* 출력결과
00000020E0F2F5A8
00000020E0F2F5AC
00000020E0F2F5B0
00000020E0F2F5B4
00000020E0F2F5B8
00000020E0F2F5BC
*/
2 차원배열 선언과 초기화
아래의 코드예제를 통해서 2차원배열 선언과 초기화에 대해서 설명드리겠습니다!
arr1배열처럼 모든 요소를 다 입력해서 초기화를 할 수 있습니다.
arr2배열은 요소 중간이 비어있지만 이 요소들은 전부 0으로 초기화됩니다.
arr3배열은 2차원 배열이지만 1차원 배열처럼 일렬로 초기화했지만 2차원 배열은 사실
1차원 배열로도 표현이 가능합니다. 그리고 초기화하지 않은 인덱스는 0으로 초기화됩니다.
arr4배열은 행열의 길이 두개 다 비워두어서 컴파일 에러가 발생합니다.
2차원배열의 길이 하나만 생략된다면 나머지차원의 길이는 계산이 가능합니다.
그래서 2차원 배열의 선언과 초기화에서는 세로길이만 생략이 가능하도록 약속되어 있습니다.
arr5, arr6배열처럼 열의 길이가 생략되어도 열의 길이는 자동으로 계산되어져서 컴파일이 성공합니다.
int arr1[3][3] =
{
{1, 2, 3,}, // 1 2 3
{4, 5, 6,}, // 4 5 6
{7, 8, 9} // 7 8 9
};
int arr2[3][3] =
{
{1}, // 1 0 0
{4, 5}, // 4 5 0
{7, 8, 9} // 7 8 9
};
int arr3[3][3] =
{
1, 2, 3, // 1 2 3
4, 5, 6, // 4 5 6
7 // 7 0 0
}
int arr4[][] = {1, 2, 3, 4}; // 컴파일 에러
int arr5[][4] = {1, 2, 3, 4, 5, 6, 7, 8}; // 컴파일 성공
int arr6[][2] = {1, 2, 3, 4, 5, 6, 7, 8}; // 컴파일 성공
반응형
반응형
'C' 카테고리의 다른 글
다차원 배열과 포인터의 관계 (0) | 2023.05.18 |
---|---|
다중포인터 (0) | 2023.05.18 |
홀수 짝수 구분 (0) | 2023.05.17 |
이진수 출력 (0) | 2023.05.17 |
홀수를 먼저 짝수를 나중에 출력하는 함수 (0) | 2023.05.17 |