해결된 질문
작성
·
137
0
C언어 기출문제의 변형 - 배열과 포인터 증가 문제
시간 : 21분대
처음 1번에서 ++*ptr은 arr 배열의 첫번째 값을 가져온 다음, ++ 전위연산자를 통해 값이 1만큼 증가된다는 것은 이해했습니다.
그리고 3번에서 *ptr++은 마찬가지로 arr 배열의 첫번째 값을 먼저 가져온 다음 (1번에 의해 바뀐 21) 후위 연산자 ++에 의해 다음 줄에 값이 1만큼 바뀌어야 하는거 아닌가요?
즉, 제가 이해하기온 *ptr++로 값 21을 반환하고 다음 줄에 만약 printf("%d", ptr)을 한다면 출력이 22가 되는 걸로 이해했는데
이 경우에는 배열의 다음 주소로 넘어가네요.
++전위 연산자는 값이 1만큼 증가되고 후위 연산자는 왜 배열의 다음 주소로 넘어가는 지가 궁금합니다!
답변 2
0
안녕하세요, 우선 포인터의 ++, --가 헷갈리신다면 연산자 우선순위 영상의 중간부분부터 복습을 부탁드립니다.
ptr++가 먼저 적용되고 그 다음에 그 값을 가져와서 출력이 되기 때문입니다.
포인터 입장에서는 '일단 이번 줄 연산에는 제자리 메모리 주소라고 말해놓고, 다음 줄이 되면 한 칸 옆 메모리 주소로 가야지' 생각하고 있을 겁니다.
그래서 원래 값을 넘겨주고 다음 줄로 넘어갔을 때 다음 주소로 넘어가있습니다.
전위연산자인 ++*ptr
의 경우에는 해당 값을 먼저 가져온 것을 ++가 되니 주소가 아니라 값이 바뀌는 것입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김예린님.
C 언어에서 포인터와 배열의 증감 연산자 사용은 처음에는 혼란스러울 수 있습니다. 질문해주신 ++*ptr
와 *ptr++
의 작동 방식에 대해 간단히 설명드리겠습니다.
++*ptr
:
ptr
이 가리키는 위치의 값을 증가시킵니다.arr
배열의 첫 번째 요소가 20이라면, ++*ptr
은 그 값을 21로 증가시키고, 이후에도 ptr
은 여전히 배열의 첫 번째 요소를 가리킵니다.*ptr++
:
++
이 후위 연산자로 사용되었기 때문입니다.*ptr++
은 현재 ptr
이 가리키고 있는 주소의 값을 반환하고 나서, ptr
은 다음 배열 요소로 이동합니다.ptr
이 arr[0]
을 가졌다면, *ptr++
을 수행한 뒤에는 ptr
이 arr[1]
을 가리키게 됩니다.말씀하신 대로 *ptr++
이후에 ptr
을 출력하면, ptr
은 다음 주소로 이동해있어 22가 아니라 arr
의 두 번째 요소의 값을 표시하게 됩니다. 이 차이가 결과적으로 이해의 열쇠입니다: 전위 연산자는 값을 먼저 연산 후에 사용하지만, 후위 연산자는 값을 먼저 사용하고 연산을 나중에 수행하는 차이입니다.
좀 더 자세한 내용을 알고 싶으시면 아래 링크들을 통해 비슷한 질문과 답변을 확인해 보세요:
- C언어 배열
- 배열과 포인터 증가 문제 질문
이 링크들은 배열과 포인터에서 증감 연산자 사용의 다양한 예제를 포함하고 있으며, 연산자 우선순위와 연산 순서에 대한 이해를 돕는데 유용할 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.