정보처리기사 실기 - 2021년 3회 C언어 기출 풀이(포인터 배열 문제)

Alchemist·2025년 9월 7일

정보처리기사

목록 보기
8/114

✨ 문제

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>
 
int main(){
    int *arr[3];
    int a = 12, b = 24, c = 36;
    arr[0] = &a;
    arr[1] = &b;
    arr[2] = &c;
 
    printf("%d\n", *arr[1] + **arr + 1);
}

🎯 출제 의도

  • 포인터 배열(pointer array)의 개념 이해
  • 주소 연산자 &와 역참조 연산자 *의 의미 확인
  • *arr[1], **arr처럼 포인터 배열을 통해 값에 접근하는 방식 이해
  • 포인터와 배열 개념을 연결할 수 있는지 확인

📘 개념 정리

1. 포인터 배열

int *arr[3];
  • arr포인터들의 배열.
  • 즉, 각 원소는 int* 타입(정수를 가리키는 주소를 저장).

2. 변수와 주소 저장

int a = 12, b = 24, c = 36;
arr[0] = &a;   // arr[0]은 a의 주소
arr[1] = &b;   // arr[1]은 b의 주소
arr[2] = &c;   // arr[2]은 c의 주소
  • 따라서 arr[0]a를 가리킴, arr[1]b, arr[2]c.

3. 역참조 연산자 *

  • *arr[1]arr[1]이 가리키는 값 → b = 24
  • *arr[0]arr[0]이 가리키는 값 → a = 12

여기서 **arr는?

  • arr 자체는 배열 이름 → arr[0]과 같은 의미
  • *arrarr[0] (즉, &a)
  • **arr*(&a)a = 12

4. 수식 해석

*arr[1] + **arr + 1
  • *arr[1] = 24
  • **arr = 12
  • +1

즉,

24 + 12 + 1 = 37

📝 풀이 과정

  1. arr[0] = &a, arr[1] = &b, arr[2] = &c
  2. *arr[1] = 24
  3. **arr = 12
  4. 최종 계산: 24 + 12 + 1 = 37

✅ 최종 출력 결과

37

💡 정리

이 문제에서 꼭 알아야 할 개념:

  • 포인터 배열: 배열의 각 원소가 포인터
  • 주소 연산자(&): 변수의 메모리 주소 반환
  • 역참조 연산자(*): 포인터가 가리키는 값 참조
  • arr는 배열 이름 → arr == &arr[0]
  • 따라서 *arr == arr[0], **arr == *arr[0]
profile
html_programming_language

0개의 댓글