정처기 감자정처기 감자
C언어포인터

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

C언어 포인터의 기초

코딩C언어
읽는데 9분 소요
처음 쓰인 날: 2026-02-03
마지막 수정일: 2026-06-25
조회수: —
선수학습(2개)
  • 메모리 구조 (스택, 힙, 데이터 영역)
  • 매개변수 전달 방식 (Call by Value)

요약

C언어 포인터의 기본 개념, 주소 연산자(&)와 역참조 연산자(*), 포인터 선언 스타일과 콤마로 여러 변수를 선언할 때의 주의점을 알아봅니다. 정보처리기사 실기 포인터 문제를 풀기 위한 핵심 개념을 정리합니다.

포인터 핵심 정리

개념설명예시
포인터메모리 주소를 저장하는 변수int *p;
주소 연산자 (&)변수의 주소를 반환&num
역참조 연산자 (*)포인터가 가리키는 값에 접근*p
포인터 선언 표시변수 이름 앞의 *가 그 변수만 포인터로 만듦int *p, *q;

포인터란?

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

포인터도 '변수'입니다
포인터는 특별한 무언가가 아니라, 다른 변수의 메모리 주소를 값으로 저장하는 변수입니다. 일반 변수가 10, 20 같은 숫자를 저장하듯이, 포인터 변수는 주소를 저장합니다.

변수는 값을 담는 상자입니다. 각 상자에는 고유한 번호(주소)가 붙어 있습니다. 일반 변수의 상자에는 10, 20 같은 값이 들어가지만, 포인터 변수의 상자에는 다른 상자의 번호(주소) 가 들어갑니다. 그 번호를 따라가면 원하는 값에 접근할 수 있습니다.

c
코드 하이라이팅 중…
  • int *p — *는 "이 변수가 포인터"라는 선언 표시입니다. p는 int형 값의 주소를 저장할 수 있습니다.
  • &num — &는 주소 연산자입니다. num이 저장된 메모리 주소를 가져옵니다.
포인터 개념 다이어그램
포인터 p는 변수 num의 주소(100)를 저장합니다. *p를 쓰면 num의 값(10)에 접근할 수 있어요.

주소 연산자 (&)

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

c
코드 하이라이팅 중…

&num은 "num의 주소"를 의미합니다. 이렇게 변수에서 주소를 가져오는 것을 참조 라고 합니다. "참조한다"는 "주소를 가져온다"와 같은 뜻입니다.


참조와 역참조

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

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

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

역참조 연산자 (*)

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

c
코드 하이라이팅 중…
표현의미결과
p포인터 변수 (주소 저장)0x1000
*pp가 가리키는 값10
&numnum의 주소0x1000
*는 선언할 때와 사용할 때 의미가 다릅니다
타입(int, char 등) 뒤에 *가 오면 포인터 선언입니다. 그 외에 *p처럼 쓰면 역참조(가리키는 값에 접근)입니다. int *p는 '포인터 선언', *p는 '값 접근'으로 구분하세요.

포인터 타입 이해하기

여기서부터 난이도가 올라갑니다. 위의 내용이 충분히 이해되지 않았다면, 먼저 위 내용을 다시 읽고 넘어오세요.

포인터에도 타입이 있습니다. int를 가리키는 포인터와 char를 가리키는 포인터는 다른 타입입니다. 포인터 타입에 따라 *p로 접근할 때 읽는 메모리 크기가 달라지기 때문입니다.

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

c
코드 하이라이팅 중…

p + 1이 왜 4바이트 이동인지는 포인터 산술에서 자세히 다룹니다. 지금은 "포인터에 1을 더하면 가리키는 타입의 크기만큼 이동한다"는 것만 기억하세요.


포인터 선언 스타일

포인터 선언은 시험 코드에서 아래 두 표기를 모두 만날 수 있습니다. 이 페이지에서는 한 줄에 여러 포인터를 선언할 때 실수가 적은 char *p처럼 변수 이름 쪽에 *를 붙여 읽는 방식으로 설명하겠습니다.

c
코드 하이라이팅 중…

두 코드는 모두 p를 char 값을 가리키는 포인터로 선언합니다. 한 변수를 선언할 때는 의미가 같습니다. 차이는 콤마로 여러 변수를 한 줄에 선언할 때 드러납니다.

c
코드 하이라이팅 중…
char* p1, p2와 char *p1, *p2 선언 차이
char* p1, p2는 p1만 포인터이고 p2는 char 변수입니다. p2도 포인터로 만들려면 콤마 뒤에 *를 다시 붙여야 합니다.

위 그림처럼 char* p1, p2;는 p1과 p2를 다르게 만듭니다. p1은 주소를 저장하는 포인터 변수이고, p2는 문자 값을 저장하는 일반 char 변수입니다.

선언실제로 만들어지는 변수
char* p1, p2;char *p1; + char p2;
char *p1, *p2;char *p1; + char *p2;

C언어 문법에서 *는 char 전체에 붙는 표시가 아니라 각 변수 이름에 붙는 포인터 선언 표시입니다. 그래서 char* p1, p2;처럼 타입 쪽에 *를 붙여 적어도, 콤마 뒤의 p2까지 자동으로 포인터가 되지는 않습니다.

값을 넣어 사용하면 차이가 더 분명합니다.

c
코드 하이라이팅 중…
콤마 뒤에도 *를 다시 붙이세요
한 줄에 포인터를 여러 개 선언할 때는 char *p1, *p2처럼 각 변수 이름 앞에 *를 다시 붙여야 합니다. char* p1, p2는 p1만 포인터이고 p2는 char 변수입니다.

25년 2회 기출 코드에도 같은 규칙이 출제된 바 있습니다.

c
코드 하이라이팅 중…

여기서 struct node는 지금은 하나의 타입 이름처럼 보면 됩니다. NULL은 아무 것도 가리키지 않는 포인터 값입니다. 이 코드는 struct node *h = NULL;과 struct node *n;을 한 줄에 쓴 것입니다. 콤마 뒤의 *n까지 확인해야 h와 n이 모두 구조체 포인터라는 점을 놓치지 않습니다.


시험 풀이에서의 임의 주소

실제 메모리 주소는 0x7FFE1234처럼 복잡한 16진수이지만, 시험 풀이에서는 계산 편의를 위해 간소화된 숫자를 사용합니다. 이 주소값은 실제 주소가 아니라 풀이를 위해 임의로 정한 것입니다.

정처기 감자의 임의 주소 규칙

대상주소 부여 방식예시
1차원 배열, 문자열100부터 1씩 증가100, 101, 102, ...
2차원 배열행마다 100 단위, 행 내에서 1씩 증가100, 101, 102 / 200, 201, 202
malloc 동적 할당10000 단위10000, 20000, 30000, ...
포인터 변수1000 단위1000, 2000, 3000, ...
문자열 배열과 포인터의 임의 주소 예시
문자열 배열 str은 주소 100부터, 포인터 변수 p는 주소 1000에 배치합니다.
2차원 배열의 임의 주소 예시
2차원 배열에서는 행이 바뀔 때 주소가 다음 100 단위로 넘어갑니다.

실제 바이트 크기(int는 4바이트 등)와 무관하게, 풀이에서는 요소마다 1씩 증가하는 연번으로 주소를 부여합니다. 포인터 변수는 배열과 구분하기 위해 1000 단위를 사용합니다.

실전 팁: 시험장에서 코드를 분석할 때 직접 주소를 부여하며 풀면 포인터의 움직임을 정확하게 추적할 수 있습니다. 주소값은 자유롭게 정해도 되지만, 일관된 규칙을 사용하면 실수를 줄일 수 있어요.


포인터 활용

포인터에 정수를 더하거나 빼서 주소를 이동하는 포인터 산술은 배열과 문자열 문제에서 핵심적으로 사용됩니다. 문자열의 시작 주소를 저장하는 문자열 포인터도 자주 출제됩니다.

포인터는 구조체와 함께 자주 사용됩니다. 구조체는 여러 값을 하나로 묶는 방법인데, 구조체 포인터에서는 화살표 연산자(->)로 구성 요소에 접근합니다. 동적 메모리 할당에서는 malloc() 함수가 할당한 메모리의 주소를 포인터에 저장합니다.

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

아래는 구조체 포인터의 예시입니다. 구조체가 처음이라면 구조체 페이지를 먼저 읽고 오세요.

c
코드 하이라이팅 중…

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

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(9개)
  • C언어 이중 포인터 (Double Pointer)
  • C언어 포인터 배열과 2차원 배열
  • C언어 포인터 산술 (Pointer Arithmetic)
  • C언어 문자열 포인터 (char *)
  • C언어 구조체 포인터
  • C언어 동적 메모리 할당 (malloc, free)
  • C언어 함수 포인터 (Function Pointer)
  • C언어 sizeof 연산자
  • C언어 스택 (Stack) - LIFO 자료구조

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어41개
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어 이진 트리 (Binary Tree)
C언어코딩C언어
2026-04-24-
C언어 중첩 구조체와 포인터 접근
C언어코딩C언어
2026-04-24-
C언어 함수 포인터 (Function Pointer)
C언어코딩C언어
2026-04-24-
배열 C언어 코딩 감자시험
감자시험C언어배열감자시험
2026-03-28응시
C언어 왕감자 정보처리기사 실기 모의 시험
C언어C언어
2026-03-27응시
제어문/반복문 C언어 코딩 감자시험
감자시험C언어제어문반복문
2026-03-28응시
연산자 C언어 코딩 감자시험
감자시험C언어연산자감자시험
2026-03-28응시
포인터 C언어 코딩 감자시험
감자시험C언어포인터감자시험
2026-03-28응시
문자열 C언어 코딩 감자시험
감자시험C언어문자열감자시험
2026-03-28응시
구조체 C언어 코딩 감자시험
감자시험C언어구조체감자시험
2026-03-28응시
C언어 구조체 배열
C언어코딩C언어
2026-03-21-
C언어 구조체 포인터
C언어코딩C언어
2026-04-24-
C언어 함수 프로토타입
C언어코딩C언어
2026-03-21-
C언어 입력 함수 - scanf, getchar, gets
C언어코딩C언어
2026-03-21-
C언어 출력 함수 - putchar, printf, puts
C언어코딩C언어
2026-09-29-
C언어 문자열 포인터 (char *)
C언어코딩C언어
2026-03-21-
C언어 포인터 산술 (Pointer Arithmetic)
C언어코딩C언어
2026-03-21-
C언어 재귀함수 (Recursion)
C언어코딩C언어
2026-03-21-
C언어 선택정렬 (Selection Sort)
C언어코딩C언어
2026-02-10-
C언어 스택 (Stack) - LIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 2차원 배열
C언어코딩C언어
2026-03-21-
C언어 원형 큐 (Circular Queue)
C언어코딩C언어
2026-03-21-
C언어 ctype.h 문자 판별 함수
C언어코딩C언어
2026-03-21-
C언어 자료형
C언어코딩C언어
2026-05-15-
C언어 이중 포인터 (Double Pointer)
C언어코딩C언어
2026-03-21-
C언어 동적 메모리 할당 (malloc, free)
C언어코딩C언어
2026-05-04-
C언어 헤더 파일과 #include
C언어코딩C언어
2026-03-21-
C언어 연결 리스트 (Linked List)
C언어코딩C언어
2026-05-06-
C언어 포인터 배열과 2차원 배열
C언어코딩C언어
2026-03-24-
C언어 큐 (Queue) - FIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 static 변수 - 값이 유지되는 변수
C언어코딩C언어
2026-03-21-
C언어 포인터를 이용한 문자열 복사
C언어코딩C언어
2026-07-09-
C언어 문자열 뒤집기 (포인터 활용)
C언어코딩C언어
2026-03-21-
C언어 구조체
C언어코딩C언어
2026-03-20-
C언어 삼항 연산자
C언어코딩C언어
2026-03-21-
C언어 typedef - 자료형에 새 이름 붙이기
C언어코딩C언어
2026-03-21-
전설의 완전수 문제 - C언어
C언어코딩C언어
2025-09-12-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999