강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김성태님의 프로필 이미지
김성태

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

"C언어 포인터 + 배열, 구조체"만 다뤄보자!

34.36 질문

해결된 질문

작성

·

27

0

for ( int i =0; i<3; ++i, ++p)

printf("%s has %d\n", p->name p->score)

에서 전위연산으로 ++ 증가했으면 i=1 이기에

Bob has 85

Cody has 92 가 나와야 하는거 아닌가요

답변 3

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 질문이 저렇게 출력이 되어야 한다는 의미일까요?

출력값을 보시면 말씀하신 것처럼 85, 92가 나오고 있는데 어디가 이상하다는 뜻인지 다시 말씀 부탁드립니다.

0

김성태님의 프로필 이미지
김성태
질문자

잘 이해가 가지않네요 그렇다면 후위연산으로 썼어야 하는거 아닌가요?

 

주말코딩님의 프로필 이미지
주말코딩
지식공유자

반복문 증감식에서는 전위든 후위든 어차피 다음 줄에서 판단하기 때문에 똑같이 적용됩니다.

정확히 어떤 부분을 이해가 어려우신지 다시 설명 가능하실까요?

0

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

질문하신 코드에서 for 루프의 증감 부분과 printf 함수 호출에 대해 조금 혼란이 있으신 것 같습니다. 순서와 로직을 이해하실 수 있도록 간단히 설명드리겠습니다.

주신 코드 조각은 for 루프와 printf 문을 활용하여 구조체 또는 배열 내의 요소를 출력하는 것으로 보입니다. 여기서 중요한 포인트는 증감 연산자의 구조입니다.

for (int i = 0; i < 3; ++i, ++p)
    printf("%s has %d\n", p->name, p->score);
  1. for 루프 실행:

    • 루프는 0에서 시작하여, 각 반복 때마다 i 를 증가시키고 p 를 다음으로 전진시킵니다.
  2. printf 실행:

    • p->namep->score 를 사용해서 현재 p 가 가리키고 있는 구조체의 데이터를 출력합니다.
    • ++p 로 인해 p 는 매 반복마다 다음 요소를 가리키게 됩니다.

for 루프의 끝부분의 조건식 ++i, ++p 는 매 반복의 끝에서 실행되므로, 각 반복에서는 여전히 처음부터 p 를 증가시키지 않고 현재 가리키는 값을 출력하고 바로 다음으로 이동합니다. 결과적으로 과거의 값이 누락되거나 먼저 출력되지는 않습니다.

따라서 출력은 다음과 같이 됩니다 (반복을 수행할 때마다 i 값만 증가하고, p는 다음 요소로 이동):
- Alice has 90 (첫 번째 요소)
- Bob has 85 (두 번째 요소)
- Cody has 92 (세 번째 요소)

이러한 방식은 p 가 매 반복 시작에서 새로운 위치를 가리키며, printf 문에서는 현재 p 가 가리키고 있는 데이터를 출력하기 때문입니다.

유사한 개념을 가진 다른 질문들을 통해 반복문과 포인터의 동작 원리를 더 이해하실 수 있습니다:
- c언어 포인터에 대해서 질문입니다
- 반복문 자료 질문드립니다.

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

김성태님의 프로필 이미지
김성태

작성한 질문수

질문하기