C언어 포인터의 기초

코딩C언어
읽는데 5분 소요
처음 쓰여진 날: 2026-02-03
마지막 수정일: 2026-02-03
조회수: 100

요약

C언어 포인터의 기본 개념, 주소 연산자(&)와 역참조 연산자(*)를 알아봅니다. 정보처리기사 실기에 자주 출제되는 포인터 문제를 풀기 위한 핵심 개념을 정리합니다.

포인터 핵심 정리

개념설명예시
포인터메모리 주소를 저장하는 변수int *p;
주소 연산자 (&)변수의 주소를 반환&num
역참조 연산자 (*)포인터가 가리키는 값에 접근*p

포인터란?

포인터(Pointer) 는 다른 변수의 메모리 주소를 저장하는 변수입니다.

모든 변수는 메모리에 저장되고, 각 메모리 공간은 고유한 주소를 가집니다. 포인터는 이 주소를 저장해서 해당 변수를 간접적으로 접근할 수 있게 해줍니다.

c
코드 하이라이팅 중...
포인터 개념
포인터 p는 변수 num의 주소(0x1000)를 저장합니다. p를 통해 num에 접근할 수 있어요.

주소 연산자 (&)

주소 연산자 & 는 변수의 메모리 주소를 반환합니다.

c
코드 하이라이팅 중...

&num은 "num의 주소"를 의미합니다. 이렇게 변수에서 주소를 가져오는 것참조(Reference) 라고 합니다.



참조와 역참조

용어의미방향연산자
참조변수의 주소를 가져옴변수 → 주소&
역참조주소로 값에 접근주소 → 값*
c
코드 하이라이팅 중...

역(逆)참조의 "역"은 반대라는 뜻입니다.

  • 참조: 변수 → 주소 (변수에서 주소로)
  • 역참조: 주소 → 값 (주소에서 값으로, 반대 방향)
text
코드 하이라이팅 중...

역참조 연산자 (*)

역참조 연산자 * 는 포인터가 가리키는 주소에 저장된 값에 접근합니다.

c
코드 하이라이팅 중...
표현의미결과
p포인터 변수 (주소 저장)0x1000
*pp가 가리키는 값10
&numnum의 주소0x1000

포인터 타입 이해하기

포인터 변수의 타입은 "무엇을 가리키는가"에 따라 결정됩니다.

int * - 정수 하나를 가리키는 포인터

c
코드 하이라이팅 중...

int (*)[3] - 배열을 가리키는 포인터

배열 포인터 는 배열 전체를 가리키는 포인터입니다. 괄호로 *와 변수명을 묶어서 선언합니다.

c
코드 하이라이팅 중...

왜 괄호가 필요한가?

연산자 우선순위 때문입니다. []*보다 우선순위가 높습니다.

선언해석의미
int *p[3]int *(p[3])포인터 3개를 담는 배열 (포인터 배열)
int (*p)[3]int (*p)[3]크기 3인 배열을 가리키는 포인터 (배열 포인터)
c
코드 하이라이팅 중...

2차원 배열에서의 타입

c
코드 하이라이팅 중...
표현타입+1 하면
arrint (*)[3]다음 행으로 이동 (12바이트)
arr[0]int *다음 요소로 이동 (4바이트)
arr[0][0]int-

arr은 "크기 3인 배열"이 2개 모인 2차원 배열입니다. 따라서 arr은 첫 번째 행(크기 3인 배열)을 가리키고, 타입은 int (*)[3]이 됩니다.



포인터 활용

포인터는 구조체와 함께 자주 사용됩니다. 구조체 포인터에서는 화살표 연산자(->)로 멤버에 접근합니다. 또한 동적 메모리 할당에서 malloc()의 반환값을 저장하는 데 사용됩니다.

포인터의 주소를 저장하는 이중 포인터도 시험에 자주 출제됩니다. 포인터를 요소로 가지는 포인터 배열은 2차원 배열과 함께 자주 출제됩니다. 포인터를 증가시키면서 문자열을 복사하는 함수나 두 개의 포인터를 활용해 문자열을 뒤집는 알고리즘도 자주 출제되는 유형입니다.

c
코드 하이라이팅 중...

정보처리기사 실기 대비 문제