인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

이은비님의 프로필 이미지

작성한 질문수

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

C언어 기출문제의 변형

22:46초 질문있습니다.

해결된 질문

작성

·

98

1

5번 *arr+1이 21이아니라 22인 이유가 궁금해요

  • 질문은 동영상 강의에 들어가서 오른쪽에 커뮤니티 버튼을 통해 해주세요. 그래야

    어떤 강좌에서 질문하셨는지 알 수 있습니다.

  • 영상에서 몇 분 몇 초 대를 알려주셔야 제가 한 번에 질문 내용 확인이 가능합니다.

  • 이미 다른 누군가가 질문을 한 이력이 있을 수 있습니다. 질문 게시판을 한 번 확인 부탁드립니다.

  • 학교의 과제나 타 강사의 코드 등 외부 수업 자료에 대해서는 답변하지 않습니다.

  • 제가 다루는 커리큘럼 외의 이론이나, 너무 디테일한 컴퓨터 이론에 대해서는 답변 드리지 않습니다.

    • 시험에 안 나오는 경우가 많고, 나와 봤자 1문제 나오는데 외워야 할 부분이 많은 것 등 (예시: 서브넷 마스크 계산)

  • 질문을 올릴 때 이 글은 모두 지우고 내용을 입력해주세요.

답변 3

0

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

안녕하세요, 1번의 ++*ptr 때문입니다. 그 때 증가해있습니다.

포인터라는 것은 가리키는 손가락에 불과합니다. 무슨 말이냐면, 손가락을 가리킨 대상의 값을 더하면 그 값을 더한 채로 유지됩니다. 왜냐하면 "원본이 바뀌었기 때문"입니다.

 

맨 처음 *ptr은 현재 arr[0]을 가리킵니다. 그리고 거기에서 값을 가져오라는 별표*를 썼죠.

그러면 20을 가져왔을 겁니다. 그리고 그것을 증가 ++ 시켰습니다.

그 때에 이미 값이 증가합니다. arr[0] = arr[0] + 1과 같은 효과이기 때문입니다.

0

김나영님의 프로필 이미지

arr은 ptr과 다르게 증감연산자 영향을 받은 적이 없는데 왜 22를 가리킬까요ㅜ 저도 이게 의문이에요

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

arr의 주소를 ptr이 가리키고 있습니다. 그래서 ptr로 값을 꺼내오면 영향을 받습니다.

그냥 그 자체가 원본을 가리키고 있기 때문입니다.

0

인프런 AI 인턴님의 프로필 이미지

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

질문하신 내용은 포인터 또는 배열 연산과 관련된 내용으로 보입니다. C 언어나 C++ 같은 언어에서는 배열의 주소와 인덱스 개념을 사용할 때 계산된 값이 예상과 다를 수 있습니다. 이 경우, 5번 *arr + 1 연산이 21이 아니라 22가 되는 이유는 *arr를 통해 얻은 값을 바탕으로 인덱싱을 하거나 포인터 연산이 수행되었기 때문일 확률이 큽니다.

유사한 질문과 답변이 이미 있을 수 있습니다. 관련하여 기존 질문들을 확인해보시길 권장 드리며, 아래에서 참고하실 링크들을 안내드립니다:

관련 질문 URL:

  1. 배열 포인터 연산 관련 질문

    • 이 질문에서는 배열과 포인터 간의 연산에 대해 설명하며, 인덱스와 주소 계산의 차이에 대해 다룹니다.
  2. C 언어 배열과 포인터 차이 설명

    • 배열과 포인터의 차이 및 연산 방법에 대해 설명되어 있는 자료로, 배열 연산 관련 이해를 돕는 데 유용할 것입니다.

본문 요약:

  • 5번 *arr + 1의 연산 결과가 예상과 다른 이유는 주로 포인터 연산이 포함된 연산들에서 발생합니다.
  • 배열의 주소와 값 접근 방식에서의 차이점을 고려해야 합니다.

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