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

검색

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

C언어 포인터 배열과 2차원 배열

코딩C언어
읽는데 11분 소요
처음 쓰인 날: 2026-02-03
마지막 수정일: 2026-03-24
조회수: —
선수학습(2개)
  • C언어 포인터의 기초
  • 배열과 리스트의 기초

요약

C언어 포인터 배열의 개념과 2차원 배열과의 관계를 알아봅니다. int* parr[2] 선언의 의미와 2차원 배열 행을 가리키는 방법을 정보처리기사 실기 대비 핵심 내용으로 정리합니다.

포인터 배열 핵심 정리

개념설명예시
포인터 배열포인터를 요소로 가지는 배열int *parr[3];
2차원 배열의 행각 행은 1차원 배열, 행 이름은 주소arr[0], arr[1]
포인터 배열 초기화2차원 배열의 행 주소로 초기화parr[0] = arr[1];

포인터 배열이란?

포인터 배열은 포인터를 요소로 가지는 배열입니다. 배열의 각 요소가 주소를 저장합니다.

일반 배열포인터 배열
int arr[3]int *parr[3]
정수 3개 저장정수 포인터 3개 저장
arr[0] = 값parr[0] = 주소

기본 예시: 변수를 가리키는 포인터 배열

c
코드 하이라이팅 중…
포인터 배열 기본 예시
포인터 배열의 각 요소는 다른 변수의 주소를 저장합니다.

아래 다이어그램에서는 임의의 주소값을 지정해서 포인터가 어떤 주소를 저장하고, 그 주소에 어떤 값이 있는지 구체적으로 보여줍니다.

임의 주소는 이해를 위해 단순화한 것입니다
실제로는 int가 4바이트이므로 주소가 4씩 증가하지만, 여기서는 이해를 쉽게 하기 위해 1씩 증가하는 것으로 표현합니다. 시험에서도 이렇게 단순화해서 풀면 됩니다.
포인터 배열 기본 예시 - 임의 주소
파란색 숫자는 임의로 정한 주소값입니다. parr의 각 요소는 변수의 주소를 저장하고, 그 주소를 따라가면 값을 읽을 수 있습니다.
c
코드 하이라이팅 중…

*(역참조, 주소를 따라가서 그 위치의 값을 읽는 것)를 만나면 해당 주소로 찾아가서 값을 읽습니다. 임의 주소를 활용하면 이 과정을 구체적으로 추적할 수 있습니다.

표현parr 값 확인역참조결과
*parr[0]parr[0] = 주소 100주소 100의 값 = 1010
*parr[1]parr[1] = 주소 101주소 101의 값 = 2020
*parr[2]parr[2] = 주소 102주소 102의 값 = 3030

응용 예시: 배열을 가리키는 포인터 배열

포인터 배열은 여러 배열의 시작 주소를 저장할 수도 있습니다.

c
코드 하이라이팅 중…
포인터 배열 응용 예시
포인터 배열로 서로 다른 크기의 배열들을 가리킬 수 있습니다.
포인터 배열 응용 예시 - 임의 주소
parr[0]은 arr1의 시작 주소(100)를, parr[1]은 arr2의 시작 주소(200)를, parr[2]은 arr3의 시작 주소(300)를 저장합니다.

임의 주소로 접근 과정을 살펴보면:

표현parr 값 확인의미결과
*parr[0]parr[0] = 주소 100arr1[0]10
*(parr[0]+1)주소 100 + 1 = 주소 101arr1[1]20
*parr[1]parr[1] = 주소 200arr2[0]40
*parr[2]parr[2] = 주소 300arr3[0]60

2차원 배열과 포인터 배열

포인터 배열로 2차원 배열의 행에 접근할 수 있습니다. 2차원 배열의 각 행 이름(arr[0], arr[1] 등)은 해당 행의 시작 주소이므로, 포인터 배열에 저장할 수 있습니다.


포인터 배열로 2차원 배열 가리키기

포인터 배열의 각 요소에 2차원 배열의 행 주소를 저장할 수 있습니다.

c
코드 하이라이팅 중…
포인터 배열과 2차원 배열
parr[0]은 arr[1]을, parr[1]은 arr[2]를 가리킵니다.
포인터 배열과 2차원 배열 - 임의 주소
parr[0]에는 주소 200(arr[1]의 시작)이, parr[1]에는 주소 300(arr[2]의 시작)이 저장됩니다.

이 코드에서:

  • parr[0]은 arr[1]을 저장 (4, 5, 6이 있는 행의 시작 주소)
  • parr[1]은 arr[2]를 저장 (7, 8, 9이 있는 행의 시작 주소)

여기서 arr[1]은 &arr[1][0]과 같습니다. C언어에서 배열 이름을 쓰면 자동으로 첫 번째 요소의 주소로 변환되는데, 2차원 배열의 행 이름도 마찬가지로 해당 행의 첫 번째 요소 주소가 됩니다.

행 이름동일한 표현의미
arr[1]&arr[1][0]1행의 첫 번째 요소 주소
arr[2]&arr[2][0]2행의 첫 번째 요소 주소

포인터 배열을 통한 접근

포인터 배열을 통해 2차원 배열의 요소에 접근하는 방법입니다.

c
코드 하이라이팅 중…
포인터 배열을 통한 2차원 배열 접근
parr[0]은 arr[1]을 가리키므로, parr[0][0]은 arr[1][0]과 같습니다. 주황색 행이 포인터 배열로 접근 가능한 부분이에요.
포인터 배열을 통한 2차원 배열 접근 - 임의 주소
parr[0][1]은 주소 200에서 1칸 이동한 주소 201의 값(5)을 가져옵니다.
parr 표현동일한 표현값
parr[0][0]arr[1][0]4
parr[0][1]arr[1][1]5
parr[1][0]arr[2][0]7
parr[1][1]arr[2][1]8

임의 주소로 접근 과정을 추적하면:

parr 표현주소 계산대상값
parr[0][0]parr[0]=주소 200, +0 → 주소 200arr[1][0]4
parr[0][1]parr[0]=주소 200, +1 → 주소 201arr[1][1]5
parr[1][0]parr[1]=주소 300, +0 → 주소 300arr[2][0]7
parr[1][1]parr[1]=주소 300, +1 → 주소 301arr[2][1]8

빠른 풀이법: 배열 치환

parr[i]가 어떤 행을 가리키는지 알면, parr[i]를 해당 행으로 치환해서 바로 값을 구할 수 있습니다.

c
코드 하이라이팅 중…
단계설명
1. 초기화 확인parr[1] = arr[2]
2. 치환parr[1][1] → arr[2][1]
3. 값 읽기arr[2][1] = 8

포인터 표기법과 배열 표기법

배열 요소에 접근하는 표기법은 포인터 방식과 배열 방식으로 서로 바꿔 쓸 수 있습니다. (포인터와 배열 자체가 같다는 뜻은 아닙니다.)

c
코드 하이라이팅 중…

포인터 + 정수 = 주소 이동

parr[1] + 1은 주소를 1칸 옮긴 것입니다. &arr[2][0]에서 &arr[2][1]로 이동한다고 생각하면 됩니다.

표현주소로 표현값
parr[1]&arr[2][0]-
parr[1] + 1&arr[2][1]-
parr[1] + 2&arr[2][2]-
*(parr[1] + 1)arr[2][1]8

임의 주소를 사용하면 더 구체적으로 볼 수 있습니다.

표현실제 주소값
parr[1]주소 300-
parr[1] + 1주소 301-
parr[1] + 2주소 302-
*(parr[1] + 1)주소 301의 값8

주소에 *를 붙이면 그 주소의 값을 가져옵니다.

배열 표기법 → 포인터 표기법 변환

배열 표기법포인터 표기법주소로 이해하기
parr[1][0]*(parr[1] + 0)&arr[2][0]의 값 = 7
parr[1][1]*(parr[1] + 1)&arr[2][1]의 값 = 8
parr[1][2]*(parr[1] + 2)&arr[2][2]의 값 = 9

parr[1][1]과 *(parr[1] + 1)이 같은 이유

C언어에서 배열 접근 a[i]는 *(a + i)와 완전히 같습니다. a가 시작 주소이고, a + i는 거기서 i칸 이동한 주소이고, *(a + i)는 그 주소의 값이니까 결국 a[i]와 같은 위치를 읽는 것입니다. 이를 적용하면:

c
코드 하이라이팅 중…

**parr의 의미

**parr은 이중 역참조입니다. 먼저 *parr로 주소를 따라가면 parr[0]을 얻는데, 이 값도 주소(200)입니다. 여기에 다시 *를 붙여야 비로소 실제 정수 값을 얻습니다.

&(주소 구하기)와 *(주소 따라가기)는 서로 반대 연산이라서, *(&x)는 항상 x와 같습니다. 이 규칙을 적용하면:

c
코드 하이라이팅 중…
*parr과 parr[0]은 같습니다
배열 이름은 첫 번째 요소의 주소입니다. parr = &parr[0]이므로 *parr = *(&parr[0]) = parr[0]입니다.

문제 풀이 예시

c
코드 하이라이팅 중…

단계별 분석:

  1. 2차원 배열 초기화

    • arr[0] = {1, 2, 3}
    • arr[1] = {4, 5, 6}
    • arr[2] = {7, 8, 9}
  2. 포인터 배열 초기화

    • parr[0] = arr[1] = &arr[1][0] (4, 5, 6의 시작 주소)
    • parr[1] = arr[2] = &arr[2][0] (7, 8, 9의 시작 주소)
  3. 각 표현 계산 - 아래 세 방법 중 편한 방법으로 풀면 됩니다.

    방법 1: 배열 표기법 (빠른 풀이)

    a[i] = *(a + i) 규칙을 적용하면 포인터 표기를 배열 표기로 바꿀 수 있습니다.

    • parr[1][1] → parr[1]을 arr[2]로 치환 → arr[2][1] = 8
    • *(parr[1]+2) = parr[1][2] → arr[2][2] = 9
    • **parr = parr[0][0] → arr[1][0] = 4

    방법 2: 주소 표기법 (원리 이해)

    • parr[1][1]
      • = *(parr[1] + 1) (배열 표기법 → 포인터 표기법)
      • = *(&arr[2][0] + 1) (parr[1] = &arr[2][0])
      • = *(&arr[2][1]) = arr[2][1] = 8
    • *(parr[1]+2)
      • = *(&arr[2][0] + 2) (parr[1] = &arr[2][0])
      • = *(&arr[2][2]) = arr[2][2] = 9
    • **parr
      • = *(parr[0]) (*parr = parr[0])
      • = *(arr[1]) (parr[0] = arr[1])
      • = *(&arr[1][0]) = arr[1][0] = 4

    방법 3: 임의 주소 풀이

    • parr[1][1]
      • parr[1]에 저장된 주소 = 300
      • 주소 300에서 1칸 이동 → 주소 301
      • 주소 301의 값 = 8
    • *(parr[1]+2)
      • parr[1]에 저장된 주소 = 300
      • 주소 300에서 2칸 이동 → 주소 302
      • 주소 302의 값 = 9
    • **parr
      • *parr = parr[0], parr[0]에 저장된 주소 = 200
      • 주소 200의 값 = 4
  4. 최종 결과: 8 + 9 + 4 = 21


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

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)

관련 글

(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언어 포인터의 기초
C언어코딩C언어
2026-06-25-
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