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

C/C++에서 배열 요소의 흔하지 않은 표현 방법: 포인터 연산 활용하기

C/C++에서 배열 요소에 접근하는 가장 일반적인 방법은 array[i]와 같은 인덱스 표기법입니다. 하지만 배열 이름 자체가 첫 번째 요소를 가리키는 포인터로 해석된다는 점을 이용하면, *(array + i)와 같은 포인터 연산 방식으로도 동일한 결과를 얻을 수 있습니다. 아래는 이러한 흔하지 않은 표현 방식을 보여주는 간단한 C++ 프로그램입니다.

예제 코드

#include<iostream>
using namespace std;
int main() {
   int array[5] = {7,7,7, 6, 6};
   for (int i = 0; i < 5; i++)
      cout<<*(array+i);
   return 0;
}

출력 결과

7 7 7 6 6

코드 설명

이 프로그램에서 핵심은 *(array+i) 부분입니다. 그 동작 원리는 다음과 같습니다.

  • 배열 이름의 포인터 성질: C/C++에서 배열 이름은 대부분의 표현식에서 첫 번째 요소를 가리키는 포인터로 자동 변환(decay)됩니다. 즉, array&array[0]과 같은 의미를 갖습니다.
  • 포인터 산술: array + i는 배열의 시작 주소에서 i개의 요소 크기만큼 이동한 주소를 나타냅니다. 예를 들어 int형 배열이라면 i * sizeof(int) 바이트만큼 이동합니다.
  • 역참조(dereference): * 연산자는 해당 주소에 저장된 값을 읽어옵니다.

결국 *(array + i)array[i]와 완전히 동일하게 동작하며, 실제로 컴파일러 내부적으로도 인덱스 표기법은 포인터 연산으로 변환되어 처리됩니다.

정리

이처럼 포인터 연산을 활용하면 인덱스 없이도 배열 요소에 순차적으로 접근할 수 있습니다. 두 표현 방식은 기능적으로 같지만, 코드의 가독성과 유지보수 측면에서는 일반적으로 array[i] 형태의 인덱스 표기법이 더 권장됩니다. 다만 포인터와 배열의 관계를 깊이 이해하는 데는 이러한 예제가 매우 유용합니다.