해결된 질문
작성
·
98
1
5번 *arr+1이 21이아니라 22인 이유가 궁금해요
질문은 동영상 강의에 들어가서 오른쪽에 커뮤니티 버튼을 통해 해주세요. 그래야
어떤 강좌에서 질문하셨는지 알 수 있습니다.
영상에서 몇 분 몇 초 대를 알려주셔야 제가 한 번에 질문 내용 확인이 가능합니다.
이미 다른 누군가가 질문을 한 이력이 있을 수 있습니다. 질문 게시판을 한 번 확인 부탁드립니다.
학교의 과제나 타 강사의 코드 등 외부 수업 자료에 대해서는 답변하지 않습니다.
제가 다루는 커리큘럼 외의 이론이나, 너무 디테일한 컴퓨터 이론에 대해서는 답변 드리지 않습니다.
시험에 안 나오는 경우가 많고, 나와 봤자 1문제 나오는데 외워야 할 부분이 많은 것 등 (예시: 서브넷 마스크 계산)
질문을 올릴 때 이 글은 모두 지우고 내용을 입력해주세요.
답변 3
0
안녕하세요, 1번의 ++*ptr 때문입니다. 그 때 증가해있습니다.
포인터라는 것은 가리키는 손가락에 불과합니다. 무슨 말이냐면, 손가락을 가리킨 대상의 값을 더하면 그 값을 더한 채로 유지됩니다. 왜냐하면 "원본이 바뀌었기 때문"입니다.
맨 처음 *ptr
은 현재 arr[0]을 가리킵니다. 그리고 거기에서 값을 가져오라는 별표*
를 썼죠.
그러면 20을 가져왔을 겁니다. 그리고 그것을 증가 ++ 시켰습니다.
그 때에 이미 값이 증가합니다. arr[0] = arr[0] + 1과 같은 효과이기 때문입니다.
0
0
안녕하세요, 인프런 AI 인턴입니다. 이은비님.
질문하신 내용은 포인터 또는 배열 연산과 관련된 내용으로 보입니다. C 언어나 C++ 같은 언어에서는 배열의 주소와 인덱스 개념을 사용할 때 계산된 값이 예상과 다를 수 있습니다. 이 경우, 5번 *arr + 1
연산이 21이 아니라 22가 되는 이유는 *arr
를 통해 얻은 값을 바탕으로 인덱싱을 하거나 포인터 연산이 수행되었기 때문일 확률이 큽니다.
유사한 질문과 답변이 이미 있을 수 있습니다. 관련하여 기존 질문들을 확인해보시길 권장 드리며, 아래에서 참고하실 링크들을 안내드립니다:
5번 *arr + 1
의 연산 결과가 예상과 다른 이유는 주로 포인터 연산이 포함된 연산들에서 발생합니다.저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
arr의 주소를 ptr이 가리키고 있습니다. 그래서 ptr로 값을 꺼내오면 영향을 받습니다.
그냥 그 자체가 원본을 가리키고 있기 때문입니다.