Inflearn Community Q&A
포인터 출력 값 관련
Resolved
Written on
·
16
0
포인터 조작과 출제 패턴(2. 포인터 중가/감소, 이중 포인터) 9:40
포인터 값 관련하여 예를 들어
배열 값이 5, 7, 9, 11, 13일 경우
*(ptr_a + 1) 출력값에 대해서는 초기 인덱스 [0]의 값 5에서 포인터 위치를 1칸 오른쪽으로 이동 후 해당 값에 대한 것을 적는것으로 확인이 되는데 그러면 답은 7이 될 겁니다.
지금 강의를 보면 ++이나 +1에 대해서는 값을 더하기 1하는 것이 아닌 포인터 위치를 오른쪽으로 1칸 이동시키는 것만 나오는 것 같은데
값 자체를 1증가시크는 것과 포인터 위치를 1 오른쪽으로 이동하는 것 관련하여 어떻게 구분하는지 모르겠습니다.
Answer 2
0
안녕하세요.
값 자체를 증가시키는 것은 말 그대로 값을 가리키면 됩니다.
우리는 포인터 변수 앞에 *(별)을 붙이면 값이 된다고 배웠습니다.
질문하신 ptr_a는 그 자체가 주소입니다. 앞에 별이 안 붙었으니까요.
그래서 +1을 하면 다음 메모리 주소로 넘어가고, 그것을 전체 괄호로 해서 *을 씌웠으니
그 메모리 주소의 값을 가리키는 것입니다.
앞에 별이 있으면 그 공간의 값(정확히 말하자면 - 역참조)을 보시면 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. dhkdxo12님.
C 언어에서 포인터와 관련된 연산은 혼동을 줄 수 있는 자리입니다. 그런데, 포인터가 다루고 있는 것은 메모리의 주소이기 때문에 ++나 +1 연산이 단순히 숫자를 더하는 것이 아니며, 이는 포인터 혹은 포인터가 가리키는 값에 영향을 줄 수 있습니다. 이에 대해 차근히 설명하겠습니다.
ptr이 가리키는 메모리 주소의 값 증가:++*ptr같은 경우에는ptr이 가리키고 있는 값 자체를 증가시킵니다. 즉,ptr이 가리키고 있는 값을 1 증가시킵니다.예를 들어,
arr가 [5, 7, 9, 11, 13]이라면,ptr이arr배열의 시작을 가리킬 때++*ptr을 사용하면 배열의 첫 번째 값이 6이 됩니다.
포인터 주소의 증가:
ptr++또는*(ptr + 1)은ptr이 가리키는 주소를 다음 주소로 이동시키는 연산입니다.이를 통해
ptr이 배열의 다음 요소를 가리키게 합니다. 예를 들어*(ptr+a+1)은ptr+a를 통해ptr을 배열의 두 번째 위치로 이동시킨 후, 그 새 위치의 값을 참조하게 됩니다. 여기서arr가 [5, 7, 9, 11, 13]이면(*ptr_a + 1)은 7을 반환합니다.
위 내용을 통해 (ptr+a+1)와 ++*ptr 등 각각의 경우에서 포인터 주소와 포인터가 가리키는 값의 증감이 어떻게 작용되는지 이해하실 수 있을 것입니다.
관련된 개념을 더 익히기 원하시면, 다음 링크의 자료가 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





메모리 주소의 값 증가 시키는 연산은
++*ptr 같이 전위 연산자로 ++가 나오는 것만 있나요?