• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

포인터와 배열

23.02.17 20:57 작성 조회수 282

0

안녕하세요!! 설명해주신 포인터와 배열 개념을 이해하는 도중 혼동이 와 질문을 남깁니다. double nums[1.0,2.0,3.0,4.0];와 같이 배열을 선언한 뒤 double *ptr = nums와 같이 포인터 변수에 nums를 넣어주는 상황으로 가정해보겠습니다. const를 배열이나 포인터 앞에 붙이면 배열의 요소들을 변경할 수 없지만 ptr++과 같이 증감연산자는 사용이 가능하다고 설명을 해주신 부분에서 ptr++을 하면 그 값은 nums[1]이 되는 것은 이해가 갑니다. 하지만 ptr++을 해주고 난 뒤 ptr[2]를 하면 nums[3]의 값이 출력된다고 하셨습니다. 저는 ptr++이라는 값이 nums[1]을 가리키는 것은 히해했지만 ptr[2]라는 값이 왜 nums[2]가 아닌 nums[3]을 가리키는지 모르겠습니다. nums ptr 포인터 변수 자체가 ptr++을 해주게 되면 nums[1]이라는 값으로 초기화가 되고 인덱싱을 하려면 기존의 nums[0]이 nums[1]과 같은 위치가 되는 것인가요??

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2023.02.18

double *ptr = nums;와 같이 nums 배열의 시작 주소를 ptr 포인터 변수에 할당하면,

ptrnums 배열의 첫 번째 요소를 가리키게 됩니다.

그리고 ptr++ 연산은 포인터 변수 ptr을 배열의 다음 요소로 이동시킵니다.

따라서, ptr++ 연산 후에는 ptrnums[1]을 가리키게 됩니다.

그리고 ptr[2]와 같이 포인터 변수를 인덱싱하면,

포인터가 가리키는 위치에서 인덱스만큼 떨어진 요소를 가리키게 됩니다.

즉, ptr[2]*(ptr + 2)와 동일합니다.

ptrnums[1]을 가리키는 상태에서 ptr[2]를 참조하면,

nums[1]에서 2칸 뒤에 있는 nums[3]의 값이 출력됩니다.

이는 nums[1]ptr이 가리키는 첫 번째 요소이므로,

ptr[2]nums[3]과 같은 값을 가리키게 됩니다.