• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

간접 지정 증감 연산 질문 있습니다.

24.02.29 14:47 작성 24.02.29 14:50 수정 조회수 136

0

포인터 간접지정 증감연산 .pngpszData의 총 5가 증가했고 (인덱스가 5개 증가) int형으로 바꾸었기 때문에 주소의 값이 5가 아닌 20이 증가한 것을 확인했습니다.

근데 Length의 값이 5가 나오는 것은 어떤 이유 때문인지 정확하게 이해가 안됩니다. 배열의 식별자는 주소 상수이기 때문에 20이 나와야 되는게 아닌가 라고 생각했습니다. 왜 5가 나오는지 잘 모르겠습니다.

pszData가 szBuffer와 5만큼 떨어져 있기 때문에 5가 나온 것입니까? 메모리에는 pszData와 szBuffer가 주소 상수값을 가지고 있고 연산한 것처럼 보이는데 왜 5가 나올까요...

답변 2

·

답변을 작성해보세요.

1

노호연님의 프로필

노호연

2024.02.29

포인터 간의 연산은 포인터 산술(pointer arithmetic)이라고 하는데, 이 때 컴파일러가 포인터가 가르키는 데이터의 크기를 기준으로 연산을 하게 됩니다. 즉 두 주소 사이에 int형 크기 변수가 5개 있다는 결과를 반환한 것입니다.
강의 도중에 강사님께서 *(ptr + 1) = prt[1]과 동일하다고 하셨는데, 여기서의 +1이 단순히 상수 1이 아니라, 데이터 하나의 크기만큼 이동하라는 것이라고 생각하시면 될 것 같습니다.

즉 pszData++의 연산 결과는 pszData + 1 과 같고 이는 데이터 크기를 기준으로 한칸을 이동하라는 식으로 해석하시면 됩니다~

나준선님의 프로필

나준선

질문자

2024.02.29

이해 됐습니다 정말 감사합니다. 포인터에 증감 연산으로 다음 인덱스로 넘어갈 때와 마찬가지로 덧셈이나 뺄셈을 할 때도 배열의 원소 간의 거리가 결과 값으로 나오는 거군요.

포인터 변수 ptr - aList(배열)을 하게 되면 사실 상

ptr[5] - aList[0] 이라고 했을때 5-0의 값 5가 출력되는거네요. 감사합니다.

도와주셔서 고맙습니다. 😄

0

노호연님께서 적절히 답변해주셨습니다. 그 답변을 그대로 받아들이시면 되겠습니다. 😄