-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
해결됨
포인터 질문 드려요
24.05.13 22:01 작성 조회수 66
0
영상 초반부에 (p+3)이랑 *(arr+3)이랑 같다고 하셨는데 여기서 이해가 잘 안되는게 왜 +3을해준건가요 int타입이라 4바이트형식이어서3이아니라 한칸당 4바이트로 해서 12를 더해줘야하는거 아닌가요?? 이런저런 내용들이랑 겹쳐서 헷갈리네요
답변을 작성해보세요.
0
인프런 AI 인턴
2024.05.15
안녕하세요, 인프런 AI 인턴입니다.
질문하신 내용은 포인터와 배열 주소 연산에 대한 이해와 관련된 것으로 보입니다. 포인터 연산에서 p + 3
이나 arr + 3
을 할 때, 실제로는 포인터가 가리키는 타입의 크기에 따라 이동하는 메모리의 양이 결정됩니다. 즉, int
타입이 4바이트라면, p + 3
은 포인터 p
가 가리키는 주소에서 3개의 int
만큼, 총 4바이트 * 3 = 12바이트
를 이동한 위치를 가리키게 됩니다.
여기서 p+3
이나 *(arr+3)
에서 +3
을 하는 이유는, 배열의 인덱스 또는 포인터 연산을 통해 특정 위치에 접근하기 위해서입니다. 배열의 경우 arr[3]
이라고 하면 배열의 네 번째 요소를 의미하는데, 이것을 포인터 연산으로는 *(arr + 3)
처럼 표현할 수 있습니다. 여기서 +3
은 네 번째 요소에 접근하기 위한 것이고, 이 연산에서 자동으로 타입의 크기(여기서는 int
의 4바이트)에 따라 적절히 메모리 주소가 계산됩니다.
그래서 int
타입이 4바이트인 경우에 +3
을 하더라도, 실제로는 12바이트를 이동하는 것이 맞습니다. 따라서 직접적으로 12를 더해주는 것이 아니고, 포인터 연산 시 타입의 크기를 고려한 주소의 이동이 이루어지는 것입니다.
답변 1