inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

포인터 마무리

포인터 질문 드려요

해결된 질문

199

킴주니

작성한 질문수 24

0

영상 초반부에 (p+3)이랑 *(arr+3)이랑 같다고 하셨는데 여기서 이해가 잘 안되는게 왜 +3을해준건가요 int타입이라 4바이트형식이어서3이아니라 한칸당 4바이트로 해서 12를 더해줘야하는거 아닌가요?? 이런저런 내용들이랑 겹쳐서 헷갈리네요

c++

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 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를 더해주는 것이 아니고, 포인터 연산 시 타입의 크기를 고려한 주소의 이동이 이루어지는 것입니다.

0

킴주니

감사합니다 해결됐습니다

소스코드와 관련하여 질문드립니다

0

70

1

map 컨테이너의 emplace 함수에 대해

0

112

2

시작이 안되네요...!

0

96

2

EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유

0

125

1

리틀 엔디안 장점 질문합니다.

0

131

1

메모리 창에 주소를 넣었는데 영어 꺠짐

0

124

1

타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.

0

94

2

map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.

1

138

2

hello world 부터 오류 ㅠㅜ

0

188

1

지역변수가 스택? 레지스터

0

127

2

마지막 문제 질문드립니다.

0

163

2

메모리창이 비활성화됩니다.

0

98

1

이중포인터 강좌 부분 질문있습니다.

0

145

1

2를 더하는 이유

0

133

1

메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다

1

110

1

해당 코드는 왜 오류가 날까요?

0

154

1

마지막 문제 질문 있습니다.

0

118

1

강의 마지막부분에 질문이 있습니다.

0

190

2

Field초기화

0

140

1

virtual과 override 차이

0

314

2

3:30 참조자 리턴

0

167

1

map 찾기

0

158

1

프로그램 질문드려요

0

259

1

캐스팅 질문

0

138

1