c 포인터 연산
조회수 2777회
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 연산자의 우선순위가 궁금하시면 아래 링크를 참조하시기 바랍니다 (영어라 짜증나긴 하지만...)
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력