다차원 배열 (C)Multidimensional Arrays (C)

첨자 식에는 다음과 같이 여러 첨자가 있을 수도 있습니다.A subscript expression can also have multiple subscripts, as follows:


expression1  
[  
expression2  
] [  
expression3  
]...  

첨자 식은 왼쪽에서 오른쪽으로 연결합니다.Subscript expressions associate from left to right. 맨 왼쪽 첨자 식인 expression1[expression2]가 먼저 계산됩니다.The leftmost subscript expression, expression1[expression2], is evaluated first. expression1expression2를 추가한 결과인 주소는 포인터 식을 형성합니다. 그런 다음 이 포인터 식에 expression3이 추가되어 새 포인터 식을 형성하고 마지막 첨자 식이 추가될 때까지 계속됩니다.The address that results from adding expression1 and expression2 forms a pointer expression; then expression3 is added to this pointer expression to form a new pointer expression, and so on until the last subscript expression has been added. 최종 포인터 값이 배열 형식의 주소를 지정하지 않으면 마지막 첨자 식이 계산된 후 간접 참조 연산자(\)가 적용됩니다(아래 예제 참조).The indirection operator (****) is applied after the last subscripted expression is evaluated, unless the final pointer value addresses an array type (see examples below).

여러 첨자가 포함된 식은 "다차원 배열"의 요소를 참조합니다.Expressions with multiple subscripts refer to elements of "multidimensional arrays." 다차원 배열은 요소가 배열인 배열입니다.A multidimensional array is an array whose elements are arrays. 예를 들어 3차원 배열의 첫 번째 요소는 2차원 배열입니다.For example, the first element of a three-dimensional array is an array with two dimensions.

예제Examples

다음 예제의 경우 이름이 prop인 배열이 세 요소로 선언되며 각각 int 값의 4x6 배열입니다.For the following examples, an array named prop is declared with three elements, each of which is a 4-by-6 array of int values.

int prop[3][4][6];  
int i, *ip, (*ipp)[6];  

prop 배열에 대한 참조는 다음과 같습니다.A reference to the prop array looks like this:

i = prop[0][0][1];  

위의 예제에서는 int의 두 번째 개별 prop 요소를 참조하는 방법을 보여 줍니다.The example above shows how to refer to the second individual int element of prop. 배열은 행별로 저장되므로 마지막 첨자는 가장 빠르게 변합니다. 식 prop[0][0][2]는 배열의 다음(세 번째) 요소를 나타냅니다.Arrays are stored by row, so the last subscript varies most quickly; the expression prop[0][0][2] refers to the next (third) element of the array, and so on.

i = prop[2][1][3];  

이 문은 prop의 개별 요소에 대한 다소 복잡한 참조입니다.This statement is a more complex reference to an individual element of prop. 이 식은 다음과 같이 계산됩니다.The expression is evaluated as follows:

  1. 첫 번째 첨자인 2는 4x6 int 배열의 크기로 곱하고 포인터 값 prop에 추가됩니다.The first subscript, 2, is multiplied by the size of a 4-by-6 int array and added to the pointer value prop. 결과는 prop의 세 번째 4x6 배열을 가리킵니다.The result points to the third 4-by-6 array of prop.

  2. 두 번째 첨자인 1은 6개 요소 int 배열의 크기로 곱하고 prop[2]에 의해 표현된 주소에 추가됩니다.The second subscript, 1, is multiplied by the size of the 6-element int array and added to the address represented by prop[2].

  3. 6개 요소 배열의 각 요소는 int 값이므로 마지막 첨자인 3int에 추가되기 전에 prop[2][1]의 크기로 곱해집니다.Each element of the 6-element array is an int value, so the final subscript, 3, is multiplied by the size of an int before it is added to prop[2][1]. 결과 포인터는 6개 요소 배열의 네 번째 요소의 주소를 지정합니다.The resulting pointer addresses the fourth element of the 6-element array.

  4. 간접 참조 연산자가 포인터 값에 적용됩니다.The indirection operator is applied to the pointer value. 결과는 해당 주소의 int 요소입니다.The result is the int element at that address.

    다음 두 예제에서는 간접 참조 연산자가 적용되지 않는 경우를 보여 줍니다.These next two examples show cases where the indirection operator is not applied.

ip = prop[2][1];  

ipp = prop[2];  

이러한 문 중 첫 번째 문에서 prop[2][1] 식은 3차원 배열 prop에 대한 유효한 참조입니다. 이 식은 6개 요소 배열을 참조합니다(위에서 선언됨).In the first of these statements, the expression prop[2][1] is a valid reference to the three-dimensional array prop; it refers to a 6-element array (declared above). 포인터 값은 배열의 주소를 지정하기 때문에 간접 참조 연산자가 적용되지 않습니다.Since the pointer value addresses an array, the indirection operator is not applied.

마찬가지로 두 번째 문 prop[2]ipp = prop[2]; 식의 결과는 2차원 배열의 주소를 지정하는 포인터 값입니다.Similarly, the result of the expression prop[2] in the second statement ipp = prop[2]; is a pointer value addressing a two-dimensional array.

참고 항목See Also

아래 첨자 연산자:Subscript Operator: