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

C 언어에서 배열 포인터의 개념과 사용법

배열 포인터란 무엇인가?

포인터(pointer)는 다른 변수의 주소(address)를 저장하는 특수한 변수입니다. 변수에 메모리가 할당되면 포인터는 그 변수가 위치한 메모리 주소를 가리키게 됩니다. 이때 단항 연산자(*)를 사용하여 포인터 변수를 선언할 수 있으며, 포인터에는 해당 메모리 공간의 주소 값이 저장됩니다.

그중 배열 포인터(array pointer)는 배열 변수가 차지하고 있는 메모리 블록의 시작 주소를 가리키는 포인터를 의미합니다.

배열 포인터 선언 문법

배열 포인터는 다음과 같은 형식으로 선언합니다.

datatype *variable_name[size];

각 구성 요소의 의미는 다음과 같습니다.

  • datatype(자료형) – int, char, float 등 변수가 가질 데이터 타입을 지정합니다.
  • variable_name(변수명) – 사용자가 직접 정하는 포인터 변수의 이름입니다.
  • size(크기) – 배열 변수의 크기, 즉 저장할 요소의 개수를 나타냅니다.

예제 코드

다음은 배열 포인터를 선언하고 그 주소 값을 출력하는 간단한 C 프로그램입니다.

#include <stdio.h>
int main () {
    int *arr[3];
    int *a;
    printf( "배열 포인터 변수의 값 : %d\n", arr);
    printf( "포인터 변수의 값 : %d\n", &a);
    return 0;
}

실행 결과

배열 포인터 변수의 값 : 1481173888
포인터 변수의 값 : 1481173880

코드 설명

위 프로그램에서는 크기가 3인 배열 포인터 *arr와 일반 정수형 포인터 *a를 각각 선언했습니다.

int *arr[3];
int *a;

이후 printf() 함수를 사용하여 두 포인터 변수가 가지고 있는 주소 값을 화면에 출력합니다.

printf( "배열 포인터 변수의 값 : %d\n", arr);
printf( "포인터 변수의 값 : %d\n", &a);

알아두면 좋은 점

  • 출력되는 주소 값은 실행 환경과 시스템마다 매번 달라지므로, 위 결과와 동일한 숫자가 나오지 않아도 정상입니다.
  • 메모리 주소를 출력할 때는 형식 지정자 %d보다 %p를 사용하는 것이 표준적이며 더 안전합니다.
  • 엄밀히 말해 int *arr[3];은 '포인터 배열(배열 안에 포인터들이 들어 있는 형태)'이고, '배열 전체를 가리키는 포인터'는 int (*arr)[3];처럼 괄호를 사용하여 선언한다는 차이점도 함께 기억해 두면 좋습니다.