1-1. 배열 이름과 포인터

문제설명

배열 이름이 포인터처럼 동작하는 원리를 이해하는 문제이다.

 

목표

  • 배열 이름이 첫 번째 요소의 주소임을 이해한다.

요구사항

  • 코드의 실행 결과를 쓰시오.
  • 왜 그런 결과가 나오는지 설명하시오.

코드

#include <stdio.h>

int main(void) {
    int arr[3] = {10, 20, 30};

    printf("%d\n", *arr);
    printf("%d\n", *(arr + 2));

    return 0;
}

 

예상답안

더보기
출력예시
10
30
  • arr는 배열의 시작 주소이다.
  • *arr는 첫 번째 값 → 10
  • *(arr + 2)는 세 번째 값 → 30

 

1-2. 포인터 증가 연산

 

문제설명

포인터 증가 연산의 의미를 이해하는 문제이다.

 

목표

  • 포인터가 자료형 크기만큼 이동함을 이해한다.

요구사항

  • 실행 결과를 쓰시오.
  • p++가 무엇을 의미하는지 설명하시오.

코드

#include <stdio.h>

int main(void) {
    int arr[3] = {5, 10, 15};
    int *p = arr;

    printf("%d\n", *p);
    p++;
    printf("%d\n", *p);

    return 0;
}
 

 

예상답안

더보기
출력예시 
5
10
  • 처음에는 arr[0] → 5
  • p++ 후 arr[1] → 10
  • int형 크기만큼 다음 주소로 이동한다.
 

 

 

3-3. 문자열 포인터

문제설명

문자열 리터럴과 문자열 포인터의 관계를 이해하는 문제이다.

 

목표

  • 문자열 리터럴을 포인터가 가리킨다는 것을 이해한다.

요구사항

  • 실행 결과를 쓰시오.
  • 왜 배열처럼 접근 가능한지 설명하시오.

코드

#include <stdio.h>

int main(void) {
    char *str = "Hello";

    printf("%c\n", str[1]);

    return 0;
}
 
 
예상답안
더보기
출력예시
e
  • 문자열은 연속된 문자들의 주소를 가진다.
  • str[1]은 두 번째 문자 → e

 

3-4. 포인터 배열

문제설명

포인터 배열의 구조를 이해하는 문제이다.

 

목표

  • 배열의 각 요소가 포인터라는 것을 이해한다.

요구사항

  • 실행 결과를 쓰시오.

코드

#include <stdio.h>

int main(void) {
    char *arr[3] = {"Apple", "Banana", "Cherry"};

    printf("%s\n", arr[1]);

    return 0;
}
 
 
예상답안
더보기

출력예시

Banana
  • arr[1]은 "Banana"를 가리키는 포인터이다.

+ Recent posts