공부

[정보처리기사 실기] 1과목: 요구사항 확인

작성일: 2026년 04월 06일·...

포인터는 정보처리기사 실기 시험의 당락을 결정짓는 중요한 요소입니다. 단순히 문법을 암기하는 것을 넘어 메모리 공간에서 데이터가 어떻게 참조되고 연산되는지 원리를 정확하게 이해해야 합니다.

1.1. 포인터의 기본 개념

포인터는 일반적인 데이터(정수, 실수 등)이 아닌, 다른 변수의 메모리 주소를 저장하는 특수한 변수입니다.

  • 일반 변수: 메모리 공간에 실제 데이터 값을 저장
  • 포인터 변수: 메모리 공간에 다른 변수의 주소를 저장
  • 1.2. 핵심 연산자

    포인터를 다루기 위해 알아야 할 두 가지 연산자가 있습니다.

    연산자명칭기능결과
    &주소 연산자해당 변수가 위치한 메모리 주소를 반환&a0x1004
    *참조 연산자포인터가 가리키는 주소의 값 반환*p10

    1.3. 단골 출제 유형: 배열과 포인터

    배열의 이름

    C 언어에서 배열의 이름은 해당 배열의 첫번째 요소의 메모리 주소를 가리키는 상수 포인터(int &a)과 동일하게 동작합니다.

  • arr = $arr[0]
  • 포인터 연산

    포인터에서 정수를 더하거나 빼면, 단순한 숫자 계산이 아니라 데이터 타입의 크기만큼 메모리 주소가 이동합니다.

    int 타입(통상 4바이트) 포인터에 1을 더하면 주소는 4바이트만큼 증가하여 다음 요소를 가리킵니다.

    1.4. 실전 문제

    #include <stdio.h>
    
    int main() {
        int arr[3] = {10, 20, 30};
        int *p = arr;
    
        printf("%d\n", *p);       // Output 1 = 10
        printf("%d\n", *(p + 1)); // Output 2 = 20
        printf("%d\n", *p + 1);   // Output 3 = 11
    
        return 0;
    }

    2. Double Pointer

    더블 포인터는 또 다른 포인터 변수의 주소를 저장하는 특수한 변수입니다.

    2.1. 메모리 주소 추적

    더믈 포인터의 원리는 내부적인 선언 및 할당 단계를 통해 파악할 수 있습니다.

  • int a = 10; 선언 시, 정수형 변수 a 는 메모리의 특정 주소(ex: 0x100)에 할당되고 값 10을 가집니다.
  • int *p = &a; 선언 시, 포인터 p는 자체적인 독립 주소(ex: 0x200)를 가지며, 저장하는 값으로 a 의 주소인 0x100를 가집니다.
  • int **dp = &p; 선언 시, 더블 포인터 dp 또한 독립적인 주소(ex: 0x300)를 가지며, 저장하는 값으로 p 의 주소인 0x200 을 가집니다.
  • 다음과 같은 구조를 바탕으로 참조 연산자 * 을 사용할 때 결과는 다음과 같습니다.

  • dp0x200 (p의 주소)
  • *dp0x100 (p의 값이자 a 의 주소)
  • **dp10 (a의 값)
  • 2.2. 실전 문제

    #include <stdio.h>
    
    int main() {
        int num = 50;
        int *p1 = &num; // p1 = num의 주소 값 보유
        int **dp1 = &p1; // dp1 = p1의 주소 값 보유
    
        printf("%d\n", **dp1); // dp1 => p1 => num의 값 50 반환
        
        **dp1 = 100;
        printf("%d\n", num); // num의 값(50)이 저장된 메모리에 100으로 값 할당
    
        return 0;
    }
    
    // 50, 100