인프런 커뮤니티 질문&답변

jiwon6760님의 프로필 이미지
jiwon6760

작성한 질문수

홍정모의 따라하며 배우는 C언어

10.10 const와 배열과 포인터

포인터를 배열처럼 사용

작성

·

415

2

안녕하세요! 포인터를 배열처럼 사용하는 원리가 이해가 가지 않아 문의 드립니다. 아래의 스크린샷을 봐주시면 감사하겠습니다!!스크린샷 2023-05-08 오전 1.39.07.pngdouble* pd = arr2;는 포인터 변수 pd에 arr2[0]의 주소 즉, &arr2[0]을 넣어주는 것이라고 생각합니다. 그래서 pd로 pd가 가지고 있는 주소값으로 그 주소가 가리키는 공간에 접근해 *pd = 3.0처럼 arr2[0] 공간의 값을 수정해주는 것은 이해가 갑니다. 하지만 pd[2] = 1024와 같이 포인터에 배열을 쓰는 것이 이해가 가지 않습니다. pd 자체는 포인터 변수이며 단순히 &arr2[0]을 가지고 있을 뿐인데 어떻게 pd 자체가 arr2처럼 배열로 동일시가 되나요?? pd[2]는 pd+2와 같은 역할을 하는 것인가요? 만약 그렇다면 arr2[0]이라는 주소값에 포인터 연산을 해 2만큼의 인덱스를 이동해 arr2[2]에 도달했다고 봐도 되나요??

답변 1

1

안녕하세요, 답변 도우미 Soobak 입니다.

네, 말씀하신 내용이 맞습니다.
해당 예시 코드에서, pd[2] 는 실제로 *(pd + 2) 와 같습니다.
여기서, pdarr2[0] 의 주소를 가리키고 있고, pd + 2pd 가 가리키는 주소에서 2번째 요소의 주소를 가리킵니다.
따라서, *(pd + 2)arr2[2] 에 대한 역참조가 됩니다.

포인터 연산은 포인터가 가리키는 데이터 타입의 크기를 고려합니다.
pd 의 경우, double 자료형을 가리키는 포인터이므로, pd + 2pd 가 가리키는 주소에서 두 개의 double 형 데이터 만큼 떨어진 위치를 가리키게 됩니다.

jiwon6760님의 프로필 이미지
jiwon6760

작성한 질문수

질문하기