본문 바로가기

카테고리 없음

포인터 배열과 배열 포인터의 사용법과 차이점을 알아보자!

1. 포인터 배열

포인터 배열은 배열의 각 요소가 포인터로 이루어진 배열을 의미합니다. 즉, 각 요소는 메모리 주소를 가리키는 포인터입니다. 이러한 포인터 배열은 다음과 같은 형태로 선언됩니다:

<자료형> *<배열이름>[<크기>];

예를 들어, 정수형을 가리키는 포인터로 이루어진 배열을 선언하고 초기화하는 방법은 다음과 같습니다:

int *ptrArray[5] = { NULL, NULL, NULL, NULL, NULL };

위 예제에서 ptrArray는 정수형 포인터로 이루어진 길이가 5인 배열입니다. 각 요소는 모두 초기값으로 NULL을 가지고 있으며, 이는 아직 해당 포인터가 어떤 메모리를 가리키지 않음을 의미합니다.

이제 포인터 배열의 각 요소에 메모리 주소를 할당하고 싶다면, 다음과 같이 포인터 변수를 선언하여 값을 대입합니다:

int num1 = 10, num2 = 20, num3 = 30, num4 = 40, num5 = 50;
ptrArray[0] = &num1;
ptrArray[1] = &num2;
ptrArray[2] = &num3;
ptrArray[3] = &num4;
ptrArray[4] = &num5;

위 코드에서 & 연산자는 변수의 메모리 주소를 구하는 용도로 사용되었습니다. 이제 ptrArraynum1에서 num5까지의 메모리 주소를 가리키는 포인터로 이루어진 배열입니다.

포인터 배열은 다양한 용도로 사용될 수 있으며, 예를 들어 동적으로 메모리를 할당하여 각 포인터에 저장하거나, 배열 요소를 정렬하거나 검색하는 등의 작업에 활용될 수 있습니다.

2. 배열 포인터

배열 포인터는 배열을 가리키는 포인터를 의미합니다. 즉, 배열 자체를 가리키는 포인터입니다. 이는 배열을 사용하는데 있어서 효율적인 접근과 다양한 작업을 수행할 수 있게 해줍니다.

배열 포인터는 다음과 같은 형태로 선언됩니다:

<자료형> (*<포인터이름>)[<크기>];

예를 들어, 정수형 배열을 가리키는 포인터를 선언하고 초기화하는 방법은 다음과 같습니다:

int arr[5] = { 10, 20, 30, 40, 50 };
int (*ptrArray)[5] = &arr;

위 예제에서 (*ptrArray)[5]는 정수형 배열을 가리키는 포인터입니다. ptrArrayarr 배열의 주소를 가리키고 있습니다.

배열 포인터를 사용하여 배열의 요소에 접근하려면 역참조 연산자(*)와 인덱스를 사용합니다:

int element = (*ptrArray)[2];

위 코드에서 (*ptrArray)는 배열 자체를 가리키는 포인터 ptrArray가 가리키는 배열을 의미하며, [2]는 해당 배열의 3번째 요소에 접근하는 인덱스입니다.

배열 포인터는 다차원 배열에서 적절하게 사용될 수 있으며, 배열 요소의 임의의 위치에 접근하고 배열을 전체적으로 순회하는 등의 작업에 유용합니다.

3. 포인터 배열과 배열 포인터의 차이점

포인터 배열과 배열 포인터는 비슷한 개념처럼 들리지만, 실제로는 다른 개념을 갖고 있습니다. 이 두 가지 개념을 구별하기 위해 다음과 같은 차이점을 알아볼 수 있습니다:

포인터 배열

  • 포인터 배열은 배열의 각 요소가 포인터로 이루어진 배열입니다.
  • 특정한 자료형을 가리키는 포인터들로 이루어져 있으며, 동일한 자료형을 가리키는 포인터들의 집합입니다.
  • 각 포인터는 메모리 주소를 저장하며, 해당 주소에 위치한 변수나 데이터에 접근할 수 있습니다.
  • 각 요소에 개별적으로 값을 대입하거나, 동적으로 메모리를 할당하여 각 포인터에 저장할 수 있습니다.
  • 선언 시에 각 요소에 초기값을 부여하거나, 초기화하지 않은 경우에는 NULL을 할당하는 것이 일반적입니다.

배열 포인터

  • 배열 포인터는 배열을 가리키는 포인터입니다.
  • 특정한 배열을 가리키는 포인터로, 해당 배열의 주소를 가리킵니다.
  • 배열 전체에 대한 메모리 주소를 가리키므로, 배열의 크기와 데이터 형식을 알 수 있습니다.
  • 배열 자체에 접근하여 배열 전체를 순회하거나 배열 요소에 접근할 수 있습니다.
  • 배열 포인터를 이용하여 포인터 산술 연산을 수행할 수 있으며, 이를 통해 배열 요소를 순회하거나 특정 요소에 접근할 수 있습니다.
  • sizeof 연산자를 사용하면 배열의 크기를 계산할 수 있습니다.

따라서, 포인터 배열은 포인터로 이루어진 배열이며, 배열 포인터는 배열을 가리키는 포인터입니다. 두 개념은 사용하는 용도와 작업의 방식이 다르므로, 잘 구별하여 사용해야 합니다.