c 포인터 연산


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++쓰거나 결과가 같습니다. 왜 그런지 궁긍합니다. 그냥 둘중에 아무거나 써도 되는건지.... 갑자기 궁금해져서 질문드립니다

  • 2016년 02월 03일에 작성됨

조회수 392


1 답변


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

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

  • 2016년 02월 03일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close