Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 포인터로 배열 요소에 접근하는 방법: 예제 코드 완벽 정리

포인터(Pointer)는 변수가 저장된 메모리의 위치, 즉 주소를 저장하는 특수한 변수입니다. 다시 말해 포인터는 특정 메모리 공간을 가리키며, 그 메모리 위치에 저장된 값을 읽어오는 작업을 역참조(dereferencing)라고 부릅니다.

예제 1: 포인터로 배열의 특정 요소 접근하기

다음은 포인터를 사용하여 배열의 한 요소에 접근하는 C++ 프로그램입니다.

#include <iostream>
using namespace std;
int main() {
   int arr[5] = {5, 2, 9, 4, 1};
   int *ptr = &arr[2];
   cout<<"The value in the second index of the array is: "<< *ptr;
   return 0;
}

실행 결과

The value in the second index of the array is: 9

위 프로그램에서 포인터 ptr에는 배열의 세 번째 인덱스에 있는 요소, 즉 값 9의 주소가 저장됩니다. 이는 아래 코드 한 줄로 구현됩니다.

int *ptr = &arr[2];

이후 간접 참조 연산자(*)를 사용해 포인터를 역참조하면 값 9를 화면에 출력할 수 있습니다.

cout<<"The value in the second index of the array is: "<< *ptr;

예제 2: 하나의 포인터로 배열 전체 요소 순회하기

다음은 단 하나의 포인터만으로 배열의 모든 요소에 차례대로 접근하는 프로그램입니다.

#include <iostream>
using namespace std;
int main() {
   int arr[5] = {1, 2, 3, 4, 5};
   int *ptr = &arr[0];
   cout<<"The values in the array are: ";
   for(int i = 0; i < 5; i++) {
      cout<< *ptr <<" ";
      ptr++;
   }
   return 0;
}

실행 결과

The values in the array are: 1 2 3 4 5

위 프로그램에서 포인터 ptr은 배열의 첫 번째 요소(arr[0])의 주소를 저장하는 것으로 시작합니다.

int *ptr = &arr[0];

그다음 for 반복문을 사용해 포인터를 역참조하며 배열의 모든 요소를 출력합니다. 반복문이 한 번 실행될 때마다 포인터가 증가(ptr++)하므로, 매 반복 시점마다 포인터는 배열의 다음 요소를 가리키게 되고, 해당 위치의 값이 화면에 출력됩니다.

for(int i = 0; i < 5; i++) {
   cout<< *ptr <<" ";
   ptr++;
}

참고: 포인터를 증가시킬 때 주소 값이 1바이트씩 늘어나는 것이 아니라, 포인터가 가리키는 자료형의 크기(예: int의 경우 일반적으로 4바이트)만큼 주소가 이동합니다. 이러한 동작 방식을 포인터 산술(pointer arithmetic)이라고 하며, 이 덕분에 포인터만으로도 배열을 인덱스 없이 자유롭게 순회할 수 있습니다.