C 또는 다른 프로그래밍 언어의 2차원 배열 배열에서 특정 요소의 주소를 인쇄하려면 C 프로그램이 필요합니다. 배열의 요소는 메모리에 순차적으로 저장되며 인덱스에 의해 액세스됩니다. C 언어의 배열은 정적 형식이며 런타임에 배열 크기를 변경할 수 없지만 Java와 같은 최신 언어는 배열을 개체로 구현하고 프로그래머에게 런타임에 크기를 조정하도록 합니다. 배열은 목록의 크기를 미리 알 면 유용한 저장소 컨테이너가 됩니다. 배열 이름을 단독으로 사용하면 배열의 주소가 반환됩니다. 아래 그림과 같이 포인터에 이 주소를 할당할 수 있습니다. 중요한 점은 parr와 *parr가 동일한 주소를 가리키지만 parr의 기본 유형은 5개의 정수 배열에 대한 포인터이며 *parr 기본 유형은 int에 대한 포인터입니다. 이것은 중요한 개념이며 2-D 배열의 요소에 액세스하는 데 사용됩니다. 배열 사용과 배열에 대한 포인터 사용 사이에는 몇 가지 차이점이 있습니다. 이 섹션에서는 아래에 정의된 벡터 배열 및 pv 포인터를 사용합니다. 화살표가 더 어둡게 표시되어 배열에 대한 포인터를 나타냅니다. 식 arr[3][0]은 arr의 네 번째 요소를 나타내고 가리키는 배열의 첫 번째 요소를 나타냅니다.
네 번째 요소가 가리키는 배열에는 두 개의 요소가 없기 때문에 식 arr[3][1]이 작동하지 않습니다. arr은 0번째 1-D 배열을 가리킵니다. (arr + 1) 1번째 1-D 배열을 가리킵니다. (arr + 2) 2번째 1-D 배열을 가리킵니다. 그러나 malloc과 같은 함수를 사용하여 2차원 배열을 만들 때 메모리를 할당하는 방법에 차이가 있습니다. 2차원 배열은 배열 배열로 처리될 수 있기 때문에 “내부” 배열이 연속되어야 할 이유가 없습니다. 배열 하위 스크립트가 이러한 배열과 함께 사용되는 경우 배열의 비연속성은 투명하게 처리됩니다. 포인터 pv에는 메모리 블록의 주소가 포함되어 있습니다. 대괄호 표기표는 pv에 포함된 주소를 취하고 포인터 산술 연산을 사용하여 인덱스 i에 포함된 값을 추가합니다. 그런 다음 이 새 주소는 해당 내용을 반환하기 위해 반참조됩니다. 예를 들어 num 배열의 경우 baseAddress = 1000, no_of_cols = 4 및 size_of_data_type = 2입니다.
2차원 배열에 대한 연속 메모리 할당에 대한 두 가지 일반적인 방법을 보여 주어 두 가지 일반적인 방법을 보여 주어 도했습니다. 사용 방법은 응용 프로그램의 요구 사항에 따라 다릅니다. 그러나 마지막 방법은 “전체” 배열에 대한 단일 메모리 블록을 생성합니다. 가변 길이 배열은 C99 버전의 C. 이전에는 realloc 함수를 사용하는 기술을 사용하여 크기가 변경되는 배열을 지원하는 데 사용되었습니다. 배열크기를 조정하기 위해 realloc 함수를 사용하여 섹션에서 realloc 함수를 보여 줍니다. 이 배열에는 세 개의 행과 세 개의 열이 있습니다. 배열의 요소는 0부터 8까지의 행 열 순서로 초기화됩니다.
그림 4-19는 이 배열에 대한 메모리가 배치되는 방식을 설명합니다. 일반적인 실수는 아래와 같이 요소 수를 결정하기 위해 배열과 함께 sizeof 연산자(sizeof 연산자)를 사용하는 것입니다. 그러나 섹션One 차원 배열에 설명 된 대로, 이것은 그것의 크기를 결정 하는 올바른 방법이 아니다. 이 경우 20의 값을 배열에 전달합니다. argv 배열이 처리되는 응용 프로그램에 인수를 전달합니다. 포인터에 2-D 배열을 할당하려면 어떻게해야합니까? 오류가 발생했습니다. 배열은 인덱스를 사용하여 액세스할 수 있는 동종 요소의 연속컬렉션입니다. 연속적으로 배열의 요소가 메모리에서 서로 인접하여 둘 사이에 간격이 없음을 의미합니다. 균일하게, 우리는 그들이 모두 같은 유형의 것을 의미합니다. 배열 선언은 괄호 집합을 사용하며 여러 차원을 보유할 수 있습니다.