C언어 포인터의 기초
요약
C언어 포인터의 기본 개념, 주소 연산자(&)와 역참조 연산자(*)를 알아봅니다. 정보처리기사 실기에 자주 출제되는 포인터 문제를 풀기 위한 핵심 개념을 정리합니다.
포인터 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 포인터 | 메모리 주소를 저장하는 변수 | int *p; |
| 주소 연산자 (&) | 변수의 주소를 반환 | &num |
| 역참조 연산자 (*) | 포인터가 가리키는 값에 접근 | *p |
포인터란? 기초
포인터(Pointer) 는 다른 변수의 메모리 주소를 저장하는 변수입니다.
변수는 값을 담는 상자입니다. 각 상자에는 고유한 번호(주소)가 붙어 있습니다. 일반 변수의 상자에는 10, 20 같은 값이 들어가지만, 포인터 변수의 상자에는 다른 상자의 번호(주소) 가 들어갑니다. 그 번호를 따라가면 원하는 값에 접근할 수 있습니다.
int *p—*는 "이 변수가 포인터"라는 선언 표시입니다.p는 int형 값의 주소를 저장할 수 있습니다.&num—&는 주소 연산자입니다.num이 저장된 메모리 주소를 가져옵니다.

주소 연산자 (&) 기초
주소 연산자 & 는 변수의 메모리 주소를 반환합니다.
&num은 "num의 주소"를 의미합니다. 이렇게 변수에서 주소를 가져오는 것을 참조 라고 합니다. "참조한다"는 "주소를 가져온다"와 같은 뜻입니다.
참조와 역참조 기초
| 용어 | 의미 | 방향 | 연산자 |
|---|---|---|---|
| 참조 | 변수의 주소를 가져옴 | 변수 → 주소 | & |
| 역참조 | 주소로 값에 접근 | 주소 → 값 | * |
역(逆)참조의 "역"은 반대라는 뜻입니다.
- 참조: 변수 → 주소 (변수에서 주소로)
- 역참조: 주소 → 값 (주소에서 값으로, 반대 방향)
역참조 연산자 (*) 기초
역참조 연산자 * 는 포인터가 가리키는 주소에 저장된 값에 접근합니다.
| 표현 | 의미 | 결과 |
|---|---|---|
p | 포인터 변수 (주소 저장) | 0x1000 |
*p | p가 가리키는 값 | 10 |
&num | num의 주소 | 0x1000 |
포인터 타입 이해하기 기초
여기서부터 난이도가 올라갑니다. 위의 내용이 충분히 이해되지 않았다면, 먼저 위 내용을 다시 읽고 넘어오세요.
포인터에도 타입이 있습니다. int를 가리키는 포인터와 char를 가리키는 포인터는 다른 타입입니다. 포인터 타입에 따라 *p로 접근할 때 읽는 메모리 크기가 달라지기 때문입니다.
int * - 정수 하나를 가리키는 포인터
p + 1이 왜 4바이트 이동인지는 포인터 산술에서 자세히 다룹니다. 지금은 "포인터에 1을 더하면 가리키는 타입의 크기만큼 이동한다"는 것만 기억하세요.
시험 풀이에서의 임의 주소 기초
실제 메모리 주소는 0x7FFE1234처럼 복잡한 16진수이지만, 시험 풀이에서는 계산 편의를 위해 간소화된 숫자를 사용합니다. 이 주소값은 실제 주소가 아니라 풀이를 위해 임의로 정한 것입니다.
정처기 감자의 임의 주소 규칙
| 대상 | 주소 부여 방식 | 예시 |
|---|---|---|
| 1차원 배열, 문자열 | 100부터 1씩 증가 | 100, 101, 102, ... |
| 2차원 배열 | 행마다 100 단위, 행 내에서 1씩 증가 | 100, 101, 102 / 200, 201, 202 |
| 포인터 변수 | 1000 단위 | 1000, 2000, 3000, ... |


실제 바이트 크기(int는 4바이트 등)와 무관하게, 풀이에서는 요소마다 1씩 증가하는 연번으로 주소를 부여합니다. 포인터 변수는 배열과 구분하기 위해 1000 단위를 사용합니다.
실전 팁: 시험장에서 코드를 분석할 때 직접 주소를 부여하며 풀면 포인터의 움직임을 정확하게 추적할 수 있습니다. 주소값은 자유롭게 정해도 되지만, 일관된 규칙을 사용하면 실수를 줄일 수 있어요.
포인터 활용 심화
포인터에 정수를 더하거나 빼서 주소를 이동하는 포인터 산술은 배열과 문자열 문제에서 핵심적으로 사용됩니다. 문자열의 시작 주소를 저장하는 문자열 포인터도 자주 출제됩니다.
포인터는 구조체와 함께 자주 사용됩니다. 구조체는 여러 값을 하나로 묶는 방법인데, 구조체 포인터에서는 화살표 연산자(->)로 구성 요소에 접근합니다. 동적 메모리 할당에서는 malloc() 함수가 할당한 메모리의 주소를 포인터에 저장합니다.
포인터의 주소를 저장하는 이중 포인터, 포인터를 요소로 가지는 포인터 배열, 포인터를 증가시키면서 문자열을 복사하는 함수나 두 개의 포인터를 활용해 문자열을 뒤집는 알고리즘도 시험에 자주 출제됩니다.
아래는 구조체 포인터의 예시입니다. 구조체가 처음이라면 구조체 페이지를 먼저 읽고 오세요.