logo

C의 다차원 배열

전제 조건: C의 배열

다차원 배열은 동질적인 데이터를 표 형식으로 저장하는 배열의 배열이라고 할 수 있습니다. 다차원 배열의 데이터는 일반적으로 메모리에 행 우선 순서로 저장됩니다.



그만큼 N차원 배열 선언의 일반적인 형태 아래에 나와 있습니다.

통사론:

data_type array_name[size1][size2]....[sizeN];>
  • 데이터 형식 : 배열에 저장될 데이터 유형입니다.
  • 배열_이름 : 배열의 이름입니다.
  • 사이즈1, 사이즈2,…, 사이즈N : 각 차원의 크기입니다.

:



이진 트리의 종류
  Two dimensional array:   int two_d[10][20];   Three dimensional array:   int three_d[10][20][30];>

다차원 배열의 크기:

다차원 배열에 저장할 수 있는 요소의 총 개수는 모든 차원의 크기를 곱하여 계산할 수 있습니다.
예를 들어:

  • 배열 정수 x[10][20] 총 (10*20) = 200개의 요소를 저장할 수 있습니다.
  • 마찬가지로 배열 정수 x[5][10][20] 총 (5*10*20) = 1000개의 요소를 저장할 수 있습니다.

배열의 크기를 바이트 단위로 얻으려면 단일 요소의 크기에 배열의 총 요소 수를 곱합니다.
예를 들어:

  • 배열의 크기 정수 x[10][20] = 10 * 20 * 4 = 800바이트. (여기서 int = 4바이트)
  • 마찬가지로, 크기 정수 x[5][10][20] = 5 * 10 * 20 * 4 = 4000바이트. (여기서 int = 4바이트)

다차원 배열의 가장 일반적으로 사용되는 형식은 다음과 같습니다.



  1. 2차원 배열
  2. 3차원 배열

C의 2차원 배열

2차원 배열 또는 2차원 배열 C에서는 다차원 배열의 가장 간단한 형태입니다. 2차원 배열은 행 번호가 0부터 (x-1)까지이고 열 번호의 범위인 'x' 행과 'y' 열이 있는 테이블을 형성하면서 서로 배열된 1차원 배열의 배열로 시각화할 수 있습니다. 범위는 0부터 (y-1)까지입니다.

2차원 배열의 그래픽 표현

3 x 3 크기의 2차원 배열의 그래픽 표현

C에서 2차원 배열 선언

2차원 배열을 선언하는 기본 형식 엑스 행과 그리고 C의 열은 아래와 같습니다.

통사론:

data_type array_name[x][y];>

어디,

  • 데이터 형식: 각 요소에 저장될 데이터 유형입니다.
  • 배열_이름: 배열의 이름
  • 엑스: 행 수.
  • 그리고: 열 수.

10개의 행과 20개의 열이 있는 'x'라는 2차원 정수 배열을 다음과 같이 선언할 수 있습니다.

예:

int x[10][20];>

참고: 이 유형의 선언에서는 배열에 스택의 메모리가 할당되며 배열의 크기는 컴파일 타임에 알려야 합니다. 즉 배열의 크기는 고정되어 있습니다. 언급된 방법을 사용하여 C에서 동적으로 배열을 만들 수도 있습니다. 여기.

C에서 2차원 배열 초기화

2D 배열을 초기화할 수 있는 다양한 방법은 다음과 같습니다.

  1. 초기화 목록 사용
  2. 루프 사용

1. 초기화 리스트를 이용한 2차원 배열 초기화

아래 예제와 같이 초기화 목록을 사용하여 C에서 2D 배열을 초기화할 수 있습니다.

첫 번째 방법:

int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}>

위의 배열에는 3개의 행과 4개의 열이 있습니다. 중괄호 안의 요소는 왼쪽에서 오른쪽으로 테이블에도 왼쪽에서 오른쪽으로 저장됩니다. 요소는 순서대로 배열에 채워집니다. 왼쪽에서 처음 4개 요소가 첫 번째 행에 채워지고, 다음 4개 요소가 두 번째 행에 채워지는 식입니다.

두 번째 방법(더 좋음) :

int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};>

이러한 유형의 초기화에서는 중첩된 중괄호를 사용합니다. 각 내부 중괄호 세트는 하나의 행을 나타냅니다. 위의 예에서는 총 3개의 행이 있으므로 내부 중괄호 세트가 3개 있습니다. 이 방법의 장점은 이해하기 쉽다는 것입니다.

참고: 이니셜라이저 목록의 요소 수는 항상 배열의 총 요소 수보다 작거나 같아야 합니다.

목록 초기화를 사용하는 경우 행 크기를 정의하지 않고 배열을 선언할 수도 있습니다. 이 경우 컴파일러는 자동으로 배열 크기를 추론합니다.

data_type array_name[][y] = {...} ;>

열 수를 정의하는 것은 여전히 ​​필수입니다.

2. 루프를 사용한 2D 배열 초기화

아래 예제와 같이 C 루프를 사용하여 2D 배열의 각 멤버를 하나씩 초기화할 수 있습니다.

예:

가운데 버튼 CSS
int x[3][4]; for(int i = 0; i <3; i++){ for(int j = 0; j < 4; j++){ x[i][j] = i + j; } }>

이 방법은 각 요소의 값이 순차적인 관계를 가질 때 유용합니다.

C에서 2차원 배열의 요소에 액세스하기

2D 배열의 요소는 행 인덱스와 열 인덱스를 사용하여 액세스됩니다. 2D 배열의 각 요소는 다음을 통해 참조할 수 있습니다.

통사론:

array_name[i][j]>

어디,

  • 나: 행 인덱스입니다.
  • 제이: 열 인덱스입니다.

예:

int x[2][1];>

위의 예는 세 번째 행과 두 번째 열에 있는 요소를 나타냅니다.

메모 : 배열에서 배열의 크기가 N인 경우 해당 인덱스는 0부터 N-1까지입니다. 따라서 행 인덱스 2의 경우 행 번호는 2+1 = 3입니다. 2차원 배열의 모든 요소를 ​​출력하려면 중첩된 for 루프를 사용할 수 있습니다. 우리는 두 개의 '가 필요합니다 ~을 위한 ' 루프. 하나는 행을 순회하고 다른 하나는 열을 순회합니다.

전체 배열을 인쇄하기 위해 루프를 사용하여 각 요소에 하나씩 액세스합니다. 순회 순서는 요구 사항에 따라 행 주요 순서 또는 열 주요 순서가 될 수 있습니다. 아래 예는 2D 배열의 행 주요 순회를 보여줍니다.

예:




// C Program to print the elements of a> // Two-Dimensional array> #include> int> main(>void>)> {> >// an array with 3 rows and 2 columns.> >int> x[3][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };> >// output each array element's value> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <2; j++) {> >printf>(>'Element at x[%i][%i]: '>, i, j);> >printf>(>'%d '>, x[i][j]);> >}> >}> >return> (0);> }> // This code is contributed by sarajadhav12052009>

>

>

산출

Element at x[0][0]: 0 Element at x[0][1]: 1 Element at x[1][0]: 2 Element at x[1][1]: 3 Element at x[2][0]: 4 Element at x[2][1]: 5>

시간 복잡도: O(N*M) 여기서 N(여기서 3)과 M(여기서 2)은 각각 행과 열의 수입니다.

공간 복잡도:O(1)

2D 배열은 메모리에 어떻게 저장됩니까?

2차원 배열의 요소는 메모리에 연속적으로 저장되어야 합니다. 컴퓨터에는 선형 메모리 주소가 있으므로 2D 배열은 저장을 활성화하기 위해 선형화되어야 합니다. 배열 요소의 선형화를 달성하는 방법에는 두 가지가 있습니다.

  • 행 주요- 선형화 기술은 먼저 배열의 첫 번째 행을 저장한 다음 배열의 두 번째 행, 세 번째 행 등을 저장합니다. (즉, 요소는 행 단위로 저장됩니다. 행은 열을 기준으로 나열됩니다.)
  • 칼럼 전공 – 이 선형화 기술은 먼저 첫 번째 열, 두 번째 열, 세 번째 열 등을 저장합니다. 즉, 요소는 열 단위로 저장됩니다. 열은 행을 기준으로 나열됩니다.

컴퓨터는 배열의 모든 요소의 주소를 추적하지 않지만 기본 주소(첫 번째 요소의 시작 주소)를 추적하고 필요할 때 요소의 주소를 계산합니다.

자세한 내용은 기사를 참조하십시오 – 1-D, 2-D, 3-D 요소의 주소 계산

C의 3차원 배열

3차원 배열 또는 3D C의 배열은 2차원 배열의 모음입니다. 여러 개의 2D 배열이 서로 쌓여 있는 것으로 시각화할 수 있습니다.

3차원 배열의 그래픽 표현

3 x 3 x 3 크기의 3차원 배열의 그래픽 표현

C에서 3차원 배열 선언

3차원 배열을 선언할 수 있습니다. 엑스 2D 배열은 각각 다음을 갖습니다. 그리고 행과 와 함께 아래에 표시된 구문을 사용하는 열입니다.

통사론:

data_type array_name[x][y][z];>
  • 데이터 형식: 각 요소에 저장될 데이터 유형입니다.
  • 배열_이름: 배열의 이름
  • 엑스: 2D 배열의 수.
  • 그리고: 각 2D 배열의 행 수입니다.
  • 와 함께: 각 2D 배열의 열 수입니다.

예:

int array[3][3][3];>

C에서 3차원 배열 초기화

3D 배열의 초기화는 2D 배열의 초기화와 동일합니다. 차이점은 차원 수가 증가하므로 중첩된 중괄호 수도 증가한다는 것입니다.

C의 3D 배열은 다음을 사용하여 초기화할 수 있습니다.

  1. 초기화 목록
  2. 루프

초기화 목록을 사용하여 3D 배열 초기화

방법 1 :

int x[2][3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};>

방법 2(더 좋음) :

int x[2][3][4] =   {   { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} },  { {12,13,14,15}, {16,17,18,19}, {20,21,22,23} }  };>

다시 말하지만, 2D 배열과 마찬가지로 초기화를 위해 초기화 목록을 사용하는 경우 첫 번째 차원의 크기를 지정하지 않고 3D 배열을 선언할 수도 있습니다. 컴파일러는 첫 번째 차원의 크기를 자동으로 추론합니다. 하지만 여전히 나머지 차원을 지정해야 합니다.

data_type array_name[][y][z] = {....};>

루프를 사용하여 3D 배열 초기화

또한 하나 이상의 차원에 접근하기 위해 중첩 루프가 하나 더 있는 2D 배열과 유사합니다.

int x[2][3][4]; for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { for (int k=0; k<4; k++) { x[i][j][k] = (some_value); } } }>

C에서 3차원 배열의 요소에 액세스하기

3D 배열의 요소에 액세스하는 것도 2D 배열의 요소에 액세스하는 것과 유사합니다. 차이점은 3D 배열에서 하나의 추가 차원을 위해 두 개의 루프 대신 세 개의 루프를 사용해야 한다는 것입니다.

통사론:

array_name[x][y][z]>

어디,

  • 엑스: 2D 배열의 인덱스입니다.
  • 그리고: 해당 2D 배열 행의 인덱스입니다.
  • 와 함께: 해당 2D 배열 열의 인덱스입니다.




이스케이프 문자 자바

// C program to print elements of Three-Dimensional Array> #include> int> main(>void>)> {> >// initializing the 3-dimensional array> >int> x[2][3][2] = { { { 0, 1 }, { 2, 3 }, { 4, 5 } },> >{ { 6, 7 }, { 8, 9 }, { 10, 11 } } };> >// output each element's value> >for> (>int> i = 0; i <2; ++i) {> >for> (>int> j = 0; j <3; ++j) {> >for> (>int> k = 0; k <2; ++k) {> >printf>(>'Element at x[%i][%i][%i] = %d '>, i,> >j, k, x[i][j][k]);> >}> >}> >}> >return> (0);> }>

>

>

산출

Element at x[0][0][0] = 0 Element at x[0][0][1] = 1 Element at x[0][1][0] = 2 Element at x[0][1][1] = 3 Element at x[0][2][0] = 4 Element at x[0][2][1] = 5 Element at x[1][0][0] = 6 Element at x[1][0][1] = 7 Element at x[1][1][0] = 8 Element at x[1][1][1] = 9 Element at x[1][2][0] = 10 Element at x[1][2][1] = 11>

비슷한 방법으로 차원 수에 관계없이 배열을 만들 수 있습니다. 그러나 차원 수가 증가하면 복잡성도 증가합니다. 가장 많이 사용되는 다차원 배열은 2차원 배열입니다.

배열은 C 언어의 포인터와도 밀접한 관련이 있습니다. C에서 배열과 포인터의 관계에 대해 더 알고 싶다면 다음을 참조하세요. 이것 기사.