해결된 질문
작성
·
106
·
수정됨
답변 3
0
안녕하세요. 3가지를 분명하게 따로 생각하시는 것이 좋습니다.
첫 번째, 포인터를 하나 옮긴 것을 출력해라. (문자열 or 배열 or 구조체 배열 or 스택이나 큐와 같은 자료구조 등 메모리 주소로 접근 가능한 경우)
두 번째, 포인터를 하나 옮긴 것을 (혹은 값을 하나 올린 것을) 해당 포인터 (혹은 값에)에 "반영"해라.
세 번째, 값을 하나 올린 것을 출력해라. (그냥 단순히 변수에 값 들어가 있는 형태나 배열을 인덱스로 접근했을 때)
첫 번째는 포인터를 옮기는 경우입니다. 이 경우는 단순하게 그 다음 주소로 옮겨서 출력하거나 코드를 해석하면 됩니다. 그게 다입니다. 가리키는 포인터에 반영된 것은 아니므로 그대로 가리키던 곳을 가리킵니다.
두 번째가 문제입니다. 이건 포인터를 옮긴 것을 (혹은 값을 증가시킨 것을) 출력도 하고, 그 자체에 반영까지 해야합니다. 이게 바로 ++ 혹은 +=과 같은 연산자가 사용됐을 때입니다. 이 경우에는 실제로 증가도 시키고 추후의 값에도 반영된 상태로 계속 가져가야 합니다.
세 번째는 첫 번째와 같은 느낌인데 값 버전입니다. 그저 값을 하나 올려서 출력하거나 계산하고 끝내면 됩니다. 그 값을 담고 있는 변수는 가만히 있고 반영된 것이 없습니다.
헷갈릴 수 있는 부분입니다. 혹시 이해가 어려우시면 추가 질문 꼭 부탁드립니다.
이해 되실 때까지 설명드리겠습니다. 감사합니다.
0
이해가 아직안되어 질문 남깁니다.
24:07 print 2번 출력결과인 30은 왜 다음으로 이어지지 않나요?
print3도 print1값을 참조했고
print4는 print 3값을 참조했는데
갑자기 print5는 print3을 참조했고 그 다음으로이어지는데
print2의 값은 다음으로 적용되지않아서 궁금합니다
0
안녕하세요, 인프런 AI 인턴입니다. SUDAM님.
C 언어에서 포인터와 배열을 다루다 보면 혼돈스러울 수 있는 부분이 많습니다. 특히 포인터 연산에서의 증감 연산자는 어떤 것이 먼저 수행되는지가 중요한데요. 질문하신 내용에 대해 설명해드리겠습니다.
질문에서 언급하신 것처럼 printf("3번. %d\n", *ptr++);
에서 사용된 후치 연산자 *ptr++
는 다음과 같이 동작합니다:
*ptr
는 현재 포인터가 가리키고 있는 메모리 위치의 값을 참조합니다. 즉, 현재의 값을 출력합니다.++
연산자에 의해 ptr
자체가 증가하여 다음 메모리 위치를 가리킵니다. 따라서, 이후에 ptr
은 arr[1]
의 값을 가리키게 됩니다.따라서 printf
의 경우, 21이라는 값이 출력된 이후에 포인터가 증가하여 ptr
이 arr[1]
을 가리키는 형태가 되는 것이 맞습니다. 처음에 포인터가 가리키고 있던 값이 21로 변경되었고, 이 값이 출력되며, 이후에 포인터는 다음 위치를 가리키게 되는 것이죠.
이해에 도움이 되셨기를 바랍니다. 관련된 예제를 보고 싶으시다면, 다음 링크도 함께 참고해보세요:
위 링크에서 비슷한 주제의 포인터와 배열을 다루는 방법에 대한 내용을 확인할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
안녕하세요, 다음 값으로 적용되지 않는다는 것이
왜 arr+1을 했는데 다음 영역에서 arr로 다시 시작하는지 궁금하신 걸까요?
해당 이유는 +1을 출력만 한 것이지, 본인에게 반영한 것이 아니기 때문입니다.
여기서 핵심은 ++이냐, +1이냐의 차이입니다.
++는 엄밀하게 말하면 a = a+1 개념입니다. 다만 ++가 앞에 있으면 먼저 수행하고, ++가 뒤에 있으면 다음으로 넘어가면서 수행하는 것입니다.
+1을 출력하는 것은 그냥 +1을 출력하는 것입니다. 예제를 들어드리자면,
int a = 10, int b = 20이 있다고 해봅시다.
++a를 출력하면 11이 출력되고, 실제로 a의 값도 1이 증가한 상태로 반영됩니다.
b+1을 출력하면 어떨까요? 그냥 21이 출력되고 끝입니다. b는 가만히 있고 출력할 때만 1을 더해서 출력한 것이죠.
이것이 현재의 값에 반영되고, 반영되지 않는 것의 차이입니다.
이 차이가 과거에도 기출문제 비슷하게 나온 걸로 알고 있습니다.
출제자 입장에서는 낚시로 내기 딱 좋을 것 같아서 문제에 포함시켰습니다.