inflearn logo
강의

Course

Instructor

(2026 Latest!) Pass the Information Processing Engineer Practical Exam in One Week

Variation of previous C language exam questions

C언어 기출문제 변형에서 6번 문제입니다. 20:56

3

kimyc4568528871

3 asked

0

20:56번의 문제가 잘 이해가 되지 않습니다.
특히나 다른 사람 질문 내용 봤는데도요

int arr[5] = {20,30,40,50,60}

int *ptr;

ptr= arr;

++*ptr이 왜 21인인가요?
실행 순서때문에 그런건가요?
제가 생각한건
사실 먼저 증가된다음 포인터가 호출될꺼라 생각을 해서 *(ptr+1) == *(arr +1) == arr[1] 을 생각하긴했거든요
*ptr++의 경우
*ptr은 주소 값이 아닌 주소값의 value를 가져오는거라
value값을 가지오는 과정 후에 ++연산이 들어간다고 생각을 해서
*ptr++==arr[0]++ == arr[0]+1로 생각을 했거든요

이부분에 대해 설명이 필요해서 돌려보는데 이해가 잘 안되서요
++*ptr이 arr[0]+1인거랑

*ptr++가 arr[0+1]인 설명이 필요합니다.
일단 외울께요

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

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 달아단거님.

C 언어에서 포인터와 배열의 증감 연산자는 처음 접할 땐 헷갈릴 수 있는 부분이 많습니다. 질문하신 ++*ptr*ptr++의 작동 원리를 설명드리겠습니다.

  1. ++*ptr:

    • 이 경우, 연산자 우선순위에 의해 ptr이 현재 가리키고 있는 주소의 이 먼저 증가됩니다.
    • 따라서, arr의 첫 번째 요소인 arr[0]에 접근하여 그 값을 20에서 21로 증가시키게 됩니다.
    • 이는 포인터가 먼저 가리키는 값(즉 arr[0])을 가져와서 1을 더하고, 그 값이 증가된 상태로 저장되는 것입니다.
  2. *ptr++:

    • 여기에선 포인터가 가리키고 있는 현재 위치의 값을 먼저 참조한 후, 포인터 ptr 자체가 1 증가합니다. 이 때문에, 이 후의 연산에선 ptr이 다음 배열 요소 arr[1]을 가리키게 됩니다.
    • 즉, *ptr++은 포인터가 현재 배열 인덱스에서 값을 사용한 후에 포인터 위치를 1 증가시킵니다.
    • 결과적으로 arr[0]의 값을 가져오고, ptr은 다음 위치로 이동하지만 해당 위치의 값은 변경되지 않습니다.

이 차이는 바로 전위 연산자와 후위 연산자의 차이에서 기인합니다. 전위 연산자는 값을 먼저 증가시키고 연산을 시작하는 반면, 후위 연산자는 값을 먼저 사용하고 그 후에 증가시키는 순서로 진행합니다.

좀 더 심화된 설명과 유사한 사례를 통해 추가적인 이해가 필요하시다면, 아래 링크들을 참조하시기 바랍니다:

이 링크들은 포인터와 배열의 상호작용에 대한 다양한 예시와 자세한 설명을 포함하고 있어 큰 도움이 될 것입니다.

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

17강 22:38

0

6

1

16강 2:17

0

17

2

부모 및 자식 생성자 출력 관련

0

10

1

부모 및 자식 생성자 출력

0

13

2

9강 35분경 질문있습니다

0

22

2

11강 3:20

0

24

2

10강 11:42

0

22

2

9강 26:23

0

35

2

9강 23:46

0

31

2

코드 중간에 . 붙은건 뭐라고 봐야할까요?

0

38

2

설명중 단어 의미 해석 문제.

0

25

1

수강 섹션마다 옆에 자료 다운로드 버튼이 있는데. 다운받으면 무슨내용이 있는건가요?

0

20

1

SQL 집중학습

0

40

1

NULL과 0

0

43

2

26년 1회 기출문제 11번 질문드립니다

0

44

1

업캐스팅 문제예시5 & 업캐스팅 문제 예시 6

0

44

2

V1.2 VS V.091

0

48

2

split('T')일때는 T만 제거되는거고 공백은 제거되지 않는 건가요?

0

50

2

파이썬 언어 업데이트, 언어별 학습자료 업데이트

0

48

2

C, java, python 언어 기출문제 강의 질문

0

52

2

1:26 에서 반복문 i[1] 이니까 0 다음 두번째 항목들 아닌가요

0

49

2

d

0

45

2

출력값

0

43

2

(기출) 2023년 3회 코드해석 문제의 1:10입니다.

0

50

2