해결된 질문
작성
·
119
답변 3
0
0
안녕하세요, 우선 답변을 드리기 전에
*, ++, --는 앞의 강의 중에 "연산자 우선순위"라고 있습니다. 다시 한 번 수강하시기를 권장드립니다.
*++ptr를 보면, ptr 변수의 입장에서는 증가를 먼저 시킵니다. (++ 먼저. 1을 증가시키고 본인에게 반영)
그 다음에 증가된 ptr이 가리키고 있는 것의 값을 가져옵니다. ( * 그 다음. 포인터 주소의 역참조)
짧은 예제 드립니다.
int arr[] = {1, 2, 3, 4};
int *ptr = arr;
int value = *++ptr;
printf("%d", value);
이 경우에 마지막 줄인 프린트 문은 어떻게 출력되어야 할까요?
우선 ptr은 배열을 가장 앞인 1에 해당하는 주소를 가리키고 있을 겁니다.
그런데 증가시켰으니 그 다음인 숫자 2의 메모리 주소를 가리키고 있겠죠.
그것의 값을 가져오라고 합니다. 그래서 2가 됩니다.
값은 그렇게 되고, 질문 주신 것처럼 포인터 초기 위치도 ptr[1]이 될까요?
네, ++는 본인 스스로에게 반영하는 것입니다.
그래서 ptr를 출력하면 숫자 2에 해당하는 주소를 가리키고 있습니다.
이렇게 만들지 않으려면 어떻게 할까요? (본인이 1이 누적 증가하지 않고, 그냥 딱 1번만 증가해서 출력하고 싶음)
단순하게 1을 더한 상태로 출력하면 본인에게 반영되지 않습니다. (ptr+1의 *을 씌운 것을 출력함)
이해에 도움이 되셨을까요?
0
안녕하세요, 인프런 AI 인턴입니다.
youngsu616님께서 질문해주신 내용은 C언어에서의 포인터 연산자에 대한 이해를 돕기 위한 아주 중요한 부분입니다. ++*ptr
과 *++ptr
의 작동 방식에 대한 차이는 포인터가 가리키는 값과 포인터 자체의 위치를 다루는 방법에서 발생합니다.
++*ptr
: 이 표현에서는 *ptr
에 해당하는 값이 먼저 증가됩니다. 예를 들어, ptr
이 배열의 첫 번째 요소를 가리키고 있다면, 그 값이 21로 증가됩니다. 이는 직접 배열의 값을 수정하는 것입니다.
*++ptr
: 여기서는 포인터 ptr
자체가 먼저 증가된 후, 새로운 위치의 값을 접근하게 됩니다. 만약 ptr
이 배열의 첫 번째 요소를 가리키고 있었다면, 배열의 두 번째 요소를 가리키게 되며, 그 값을 출력하게 됩니다. 그래서 arr[1]
, 즉 30이 출력될 것입니다.
질문의 더 깊은 이해를 위해 참고하실 만한 기존 질문과 답변이 있습니다:
이해에 도움이 되셨길 바랍니다. 연산자 우선순위와 포인터 증감 연산자에 대한 이해는 C언어의 기반이 되는 부분이니, 기존의 질문과 강의 내용을 통해 추가적인 학습을 추천드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
+1은 단순히 +1하고 보고 끝입니다.
해당 변수에 누적하지 않습니다.
예를 들면
2인 변수에 1을 더해서 출력하면 3이 됩니다.
변수값이 변하지는 않죠.
그런데 2인 변수를 ++하고 출력하면 3이 되면서
변수 자체도 값이 3으로 저장 반영되어있습니다.