inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

포인터 조작과 출제 패턴 (2. 포인터 증가/감소, 이중 포인터)

포인터 증감 또는 값 증감

해결된 질문

49

dhkdxo12

작성한 질문수 48

0

포인터 조작과 출제 패턴(2. 포인터 증가/감소, 이중 포인터)


char a[]="Hello";

int b[]={1, 2, 3, 4, 5};

char *ptr_a = a;

printf("%c\n", *ptr_a);

여기에서 배열이 가르키는 첫번째 요소 "H"를 출력한다는 것은 이해했습니다.

하지만 그다음

ptr_a++;

해당 문장은 증감식으로 값을 +1하는 것이 아니라 포인터 +1을 하여 다음 주소의 값을 지칭한다고 하는데


ptr_a++; 이것이 포인터 1 증가하는 것이면

값을 1 증가하는 것을 표현하려면 어떻게 해야하나요?

python java c 정보처리기사 정보처리산업기사

답변 2

0

주말코딩

안녕하세요, 답변드립니다.


값을 1 증가시키려면 *로 먼저 값에 접근한 다음 증가시켜야 합니다. 이때 괄호가 꼭 필요합니다.

강의에서 말씀드린 것처럼 메모리 주소에서는 *을 통해서 값으로 환산시켜야지만 값으로 계산할 수 있습니다.

(*ptr_a)++;   // 또는 ++(*ptr_a);, ++*ptr_a;

ptr_a가 'H'를 가리키고 있을 때 (*ptr_a)++를 하면 'H'의 아스키코드 72가 73이 되어 'I'로 바뀝니다.

이후 printf("%s\n", a);를 출력하면 "Iello"가 나옵니다.


시험에서 나올 수 있을만한 함정은 괄호 없이 쓴 *ptr_a++입니다.

후위 ++가 *보다 우선순위가 높아서 *(ptr_a++)로 해석됩니다.

즉 현재 값('H')을 꺼내 쓰고, 그다음 포인터가 이동합니다. 값은 바뀌지 않습니다.


정리하면 다음과 같습니다.

BetterShot_2026-10-16-22-06-48.png

0

dhkdxo12

정리해주신 예시 감사합니다.

혹시 시험 대비를 위해서 예시를 들어주신 것처럼 나올 수 있는 포인터 출력 값 유형별로 정리해서 올려주실 수 있나요?

0

주말코딩

시험에서 나올 수 있는 것은 사실상 C언어 문법 전체라서,

한 번에 정리해드리는 건 사실상 불가능합니다.

다만 LLM을 통해서 예제를 하나 뽑아봤습니다. 천천히 따라가면서 학습해보시기를 권장드립니다. (참고: %p는 메모리 주소를 출력하는 포맷이라고 생각하시면 됩니다.)

#include <stdio.h>

int main(void) {
    int arr[] = {10, 20, 30, 40, 50};
    int *p = arr;

    printf("%p\n", (void *)p);        // ① 주소
    printf("%d\n", *p);               // ② 값
    printf("%p\n", (void *)(p + 1));  // ③ 주소 + 1
    printf("%d\n", *(p + 1));         // ④ 다음 칸의 값
    printf("%d\n", *p + 1);           // ⑤ 값 + 1

    printf("%p\n", (void *)p++);      // ⑥ 포인터 후위 증가
    printf("%d\n", *p);               // ⑦
    printf("%p\n", (void *)++p);      // ⑧ 포인터 전위 증가
    printf("%d\n", *p);               // ⑨

    printf("%d\n", *p++);             // ⑩ 값 사용 후 포인터 이동
    printf("%d\n", *++p);             // ⑪ 포인터 이동 후 값 사용
    printf("%d\n", (*p)++);           // ⑫ 값 사용 후 값 증가
    printf("%d\n", ++*p);             // ⑬ 값 증가 후 사용
    printf("%d\n", *p);               // ⑭

    printf("%d\n", *p--);             // ⑮ 값 사용 후 포인터 감소
    printf("%d\n", *--p);             // ⑯ 포인터 감소 후 값 사용

    return 0;
}


BetterShot_2026-10-16-22-52-49.png


실제로 온라인 컴파일러에서 실행한 값도 붙여넣겠습니다. 참고하세요.

BetterShot_2026-10-16-22-56-07.png


0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. dhkdxo12님.

ptr_a++는 포인터 변수 자체를 증가시키는 연산이므로, char 배열에서 다음 요소를 가리키게 됩니다.

char a[] = "Hello";
char *ptr_a = a;

ptr_a++;      // ptr_a가 a[1]('e')을 가리킴

포인터가 가리키는 값을 1 증가시키려면 역참조 연산자 *를 함께 사용해야 합니다.

++(*ptr_a);   // 값 증가 후 사용: 'H' → 'I'
(*ptr_a)++;   // 현재 값을 사용한 뒤 증가: 'H' → 'I'

또는 다음과 같이 작성할 수도 있습니다.

++*ptr_a;

연산자 우선순위에 따라 ++*ptr_a는 ++(*ptr_a)와 같은 의미입니다.

정리하면 다음과 같습니다.

ptr_a++;      // 포인터가 다음 요소로 이동
++(*ptr_a);   // 포인터가 가리키는 값 증가
(*ptr_a)++;   // 포인터가 가리키는 값을 사용한 뒤 증가

예를 들어 ptr_a가 처음에 a[0]을 가리키고 있다면 다음 코드의 결과는 다음과 같습니다.

printf("%c\n", *ptr_a);  // H

++(*ptr_a);
printf("%c\n", *ptr_a);  // I

ptr_a++;
printf("%c\n", *ptr_a);  // e

포인터 자체의 증감과 포인터가 가리키는 값의 증감을 다룬 유사한 질문과 답변은 아래에서 확인하실 수 있습니다.

해당 답변에서도 ++*ptr는 포인터가 가리키는 값을 증가시키고, *ptr++는 현재 값을 사용한 뒤 포인터를 다음 주소로 이동시키는 차이를 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

모의고사 자료 해설이 너무 불친절하네요.

0

16

2

부모의 생성자 출력 관련

0

9

2

이론파트 재탕문제

0

12

0

누락코드

0

11

1

다차원 배열 포인터 질문있습니다

0

18

3

이론 파트 재탕

0

23

1

모의고사 5회

0

20

1

12분 10초 func(values, 0, 1)을 넣을 때

0

19

1

모의고사 1회 4번 문제와 관련한 질문이 있습니다.

0

17

2

재탕문제

0

46

1

재탕문제

0

29

0

파이썬 추가 코드

0

49

1

배열 포인터 출력 표시

0

52

2

배열 포인터 함수 관련

0

46

2

실기 이론 통합 요약본 버전

0

57

2

업캐스팅 3번 문제 예시

0

62

2

push pop 설명 되어있는 강의가 몇강인가요?

0

50

1

모의고사 파일오류

1

82

3

모의고사 다운

0

57

1

업캐스팅 원칙

0

69

2

6분46초

0

61

2

공략법

0

69

1

모의고사 파일과 이론파일 업데이트

1

79

3

이론 pdf 다운은 어디서 하나요?

0

75

2