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

비트올려라님의 프로필 이미지

작성한 질문수

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

C언어 기출문제의 변형

C언어 기출문제 변형 배열과 포인터 증가 문제 질문있습니다

24.07.12 14:37 작성

·

203

0

안녕하세요

문제에서

전치연산으로++*ptr은 포인터가 가르키는 값이 증가되는데

왜 후치연산으로 *ptr++ 할때는 가르키는 값이 아니라 가르키는 주소가 증가되는건가요?

강의 설명을 봐도 이해가 잘 안가네요ㅠㅠ

답변 3

1

Electric Bass님의 프로필 이미지

2024. 07. 13. 13:29

저도 좀 헷갈리는 부분인데 강의를 여러 번 봐도 헷갈리네요.

풀이 할 때 주석 형식으로 배열 현재값과 포인터 위치까지 표기 해주시면 더 이해하기 쉬울것 같습니다.

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

2024. 07. 13. 14:14

네, 피드백 해주신 부분 반영해서 추후 영상 촬영하도록 하겠습니다.

정말 감사드립니다.

1

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

2024. 07. 12. 21:09

안녕하세요, 제가 연산자의 우선순위를 따로 다루지 않아서 헷갈리실 수 있을 거라고 생각했습니다.

일단, *ptr++ 은 2가지가 있겠죠. *가 먼저인지 ++인지에 따라서 완전히 다르게 해석이 될 것입니다.

(가정) *이 먼저 된다 -> 가리키고 있는 값을 먼저 가져오겠죠? 그리고 그 값을 증가시킬 겁니다. 값이 1이었다면 2가 되겠죠.

(가정) ++가 먼저 된다 -> 메모리를 증가시키겠죠? 메모리 주소값이 다음으로 넘어가고, 배열의 경우였다면 그 다음 인덱스의 값을 출력할 것입니다.

 

 

1. 후위 연산자일 때는 어떻게 돼요?

정답은 ++(후위)가 우선순위가 높습니다. 후위연산자는 거의 모든 연산자 중에서 가장 높은 우선순위라고 생각하시면 됩니다.

그래서 아래와 같이 해석이 됩니다.

  • ptr++ 부분이 먼저 평가됩니다. 후위 증감 연산자(++)는 현재 포인터 값(ptr)을 사용한 후, ptr을 증가시킵니다.

  • 그 다음에 * 연산자가 적용됩니다. 이 때, 이미 증가되기 전의 ptr 값이 사용되므로, 증가 전의 포인터가 가리키는 값을 참조하게 됩니다.

 

예를 들어 만약 ptr이 배열을 가리키고 있다고 가정해봅시다.

int arr[] = {10, 20, 30};
int *ptr = arr;

int value = *ptr++;

이 경우, value10이 되고, ptrarr[1]을 가리키게 됩니다.

요약하자면, *ptr++는 현재 포인터가 가리키는 값을 참조하고, 그 후에 포인터를 다음 위치로 이동시키는 연산입니다.

 

2. 전위 연산자의 경우에는 어떻게 돼요?

전위 연산자인 ++*ptr은 어떨까요?

  1. *ptr 부분이 먼저 평가됩니다. 이는 ptr이 가리키는 메모리 위치의 값을 참조합니다.

  2. 그 다음으로 전위 증감 연산자(++)가 적용되어 참조된 값이 증가합니다.

예를 들어, 만약 ptr이 배열을 가리키고 있다고 가정해 봅시다:

int arr[] = {10, 20, 30};
int *ptr = arr;

++*ptr;

이 경우, ptr이 가리키는 arr[0]의 값은 10에서 11로 증가합니다. arr 배열은 다음과 같이 변경됩니다:

arr = {11, 20, 30};

요약하자면, ++*ptr는 포인터가 가리키는 위치의 값을 1 증가시키는 연산입니다.

 

감사합니다.

 

비트올려라님의 프로필 이미지

2024. 07. 14. 14:19

이해가 잘 안됐는데 설명 자세히 해주셔서 정말 감사합니다!

0

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

2024. 07. 12. 14:41

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

비트올려라님의 질문에 대해, C언어에서의 전치 연산자 ++*ptr와 후치 연산자 *ptr++ 작동 방식에 대해 설명드립니다. 전치 연산자 ++*ptr는 포인터가 가리키고 있는 값에 대해 연산을 먼저 수행하고, 그 값을 반환합니다. 즉, 포인터가 가리키는 값 자체가 증가됩니다. 한편, 후치 연산자 *ptr++는 포인터가 가리키고 있는 값에 대해 연산을 수행한 후 포인터 자체를 증가시킵니다. 여기서 주의해야 할 점은 후치 연산자의 경우 포인터의 값(주소)이 증가된다는 것이며, 가리키고 있는 값의 증가는 연산 대상이 아니라는 점입니다.

질문하신 내용과 관련하여, 강의 중 하나에서 이와 유사한 주제에 대해 설명하는 부분이 있습니다. 해당 내용은 포인터와 배열에서 포인터의 증감 연산자 작동 방식에 대한 이해를 돕습니다. 참고하실 만한 질문으로 C언어 배열 질문이 있습니다. 이 답변에서는 ++*ptr*ptr++의 차이점을 설명하고 있으며, 배열과 포인터를 이용할 때 각 연산자가 어떻게 작동하는지 구체적인 예제를 통해 이해를 돕고 있습니다.

해당 질문에 대한 답변을 통해, 전치 연산자와 후치 연산자가 포인터 및 그가 가리키는 값에 어떤 영향을 주는지 보다 명확히 이해하실 수 있습니다.

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