작성
·
416
2
안녕하세요! 포인터를 배열처럼 사용하는 원리가 이해가 가지 않아 문의 드립니다. 아래의 스크린샷을 봐주시면 감사하겠습니다!!double* 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)
와 같습니다.
여기서, pd
는 arr2[0]
의 주소를 가리키고 있고, pd + 2
는 pd
가 가리키는 주소에서 2번째 요소의 주소를 가리킵니다.
따라서, *(pd + 2)
는 arr2[2]
에 대한 역참조가 됩니다.
포인터 연산은 포인터가 가리키는 데이터 타입의 크기를 고려합니다.pd
의 경우, double
자료형을 가리키는 포인터이므로, pd + 2
는 pd
가 가리키는 주소에서 두 개의 double
형 데이터 만큼 떨어진 위치를 가리키게 됩니다.