배열과 포인터 예제

마지막 예제에서 볼 수 있듯이 문자열 배열을 정렬하려면 많은 데이터를 복사해야 하는 문자열을 교체해야 합니다. 효율성을 위해 문자열이나 전체 데이터 베이스 레코드와 같이 데이터 항목이 클 때마다 실제 데이터 교환을 방지하는 것이 좋습니다. 또한 배열이 두 개 이상의 순서로 필요할 수 있습니다. 예를 들어 ID 번호와 가중 점수별로 정렬된 시험 점수 배열이 필요할 수 있습니다. 또는 정렬되지 않은 형식과 정렬된 양식 모두에서 문자열이 필요할 수 있습니다. 이러한 경우 모두 각 데이터 복사본을 서로 다르게 정렬하거나 데이터 구조를 보다 효율적으로 저장하는 방법을 찾아야 합니다. 해결책은 배열의 요소에 대한 포인터를 사용하고 포인터를 교환하는 것입니다. 몇 가지 예를 고려하십시오: 4개의 정수 포인터가 있으므로 ptr1, ptr2, ptr3 및 ptr4와 같은 4개의 개별 정수 포인터 변수를 만들 수 있습니다. 우리는 포인터의 배열의 개념을 이해하기 전에, 우리는 3 정수의 배열을 사용하는 다음과 같은 예를 살펴 보자 – 포인터의 배열을 통해 변수의 값에 액세스하려면 우리는 * 연산자의 주소에서 값을 사용해야합니다. 위의 코드에서는 5개의 문자를 저장하기 위해 5개의 연속된 메모리 바이트를 할당했습니다. 그런 다음 배열 표기와 를 사용하여 pvowels가 배열인 것처럼 메모리 블록을 통과했습니다. 그러나 pvowels는 실제로 포인터이며 포인터 및 배열, 포인터 및 배열에서 설명한 것처럼 일반적으로 동일하지 는 않습니다. 2차원 배열에 대한 동적 메모리 할당을 살펴보면이 자습서를 마무리합니다.

이는 유사한 방식으로 n 차원으로 일반화될 수 있습니다. 포인터를 사용한 1차원 배열과 달리 이 경우 아래와 같이 포인터에 대한 포인터가 필요합니다. 정렬된 순서로 데이터 항목을 가리키도록 포인터의 순서를 다시 정렬하는 것을 포인터별로 정렬이라고 합니다. 데이터 레코드 나 문자열과 같은 데이터 항목이 큰 경우 전체 데이터 레코드를 이동하는 것보다 포인터를 이동하는 것이 훨씬 효율적이기 때문에 정렬하는 것이 선호되는 방법입니다. 여기서 arrop은 5개의 정수 포인터 배열입니다. 즉, 이 배열은 5개의 정수 변수의 주소를 보유할 수 있습니다. 즉, 이 배열의 요소에 int에 형식 포인터의 5 개의 포인터 변수를 할당할 수 있습니다. 문자열의 2차원 배열, name[]]과 문자 포인터의 배열인 nameptr[]을 선언합니다.

그런 다음 문자열을 으로 읽고 각 문자열 포인터 이름을 nameptr[i]에 할당합니다. 그런 다음 함수 sortptrs()를 호출하여 nameptr[] 순서를 변경하여 배열의 연속된 포인터가 정렬된 순서로 문자열을 가리킵니다. 마지막으로 문자열은 name[i]을 통해 정렬되지 않은 순서로 인쇄되고 nameptr[i]를 통해 문자열에 액세스하여 정렬된 순서로 인쇄됩니다. ptr을 MAX 정수 포인터의 배열로 선언합니다. 따라서 ptr의 각 요소는 int 값에 대한 포인터를 보유합니다. 다음 예제는 다음과 같이 포인터의 배열에 저장된 세 개의 정수를 사용합니다 – 우리가 int 또는 char 또는 사용 가능한 다른 데이터 유형에 대한 포인터를 저장할 수있는 배열을 유지하려는 상황이있을 수 있습니다. 다음은 정수에 대한 포인터 배열의 선언입니다 – 이제 우리는 포인터를 사용하여 배열을 통과 할 수 있다는 것을 알고 있습니다.