c 포인터 연산

조회수 2711회
int arr[]= { 1, 2, 4, 8, 16 };
int* ptr= arr;
for(int i=0;i<5;i++)
{
 printf("arr[%d]= %d\n", i, *ptr);
 *ptr++; // ptr++로 해도 결과가 같음
}

*ptr++을 쓰거나 ptr++쓰거나 결과가 같습니다. 왜 그런지 궁긍합니다. 그냥 둘중에 아무거나 써도 되는건지.... 갑자기 궁금해져서 질문드립니다

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • ++ (Suffix/postfix increment) 연산자의 우선순위가 * (Indirection) 연산자의 우선 순위가 높기 때문에 위 코드의 *ptr++ 표현은 *(ptr++)로 파싱(변환?)됩니다. 즉, *ptr++ 문은 ptr의 주소를 1 증가시키고 그 주소의 값을 단순히 읽어요 (불필요한 연산). 고로 *ptr++, ptr++ 모두 반복마다 ptr의 주소를 1 증가시키기 때문에 출력 결과가 같겠죠? *ptr++은 불필요한 읽기 연산을 수반하기 때문에 ptr++를 쓰시는 것을 추천합니다, 쾅!

    혹 C 연산자의 우선순위가 궁금하시면 아래 링크를 참조하시기 바랍니다 (영어라 짜증나긴 하지만...)

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)