[완료]performance counter 소스분석 중, c언어 포인터에 대해 질문.
글쓴이: superdma / 작성시간: 월, 2009/07/06 - 9:41오후
performance counter 소스코드에 대해 분석하고 있는 와중에,
res= *(int *)((char *)PtrToCntr + PerfCntr->CounterOffset);
이란 문장을 만났습니다. -_-;
형변환을 왜 두번에 걸쳐서 하는지 이해가 되지않습니다.
나름 해석한대 까지 표현 해보면, "PtrToCntr 포인터를 CounterOffset만큼 포인터 증가 연산 후,
그 주소를 (char *)으로 변환 한 후 다시 또 (int *)을 변환하여 int 형 변수에 접근한다" 입니다.
왜 (char *)을 형변환후 다시 (int *)으로 변환하는 지 모르겠네요.
감사합니다.
코드는 아래 링크의 pdf문석의 10쪽 중단에 위치해 있습니다.
http://lollab.com/mat/pdh/pdh1.pdf
Forums:
char *로 형변환한
char *로 형변환한 이유는 PerfCntr->CounterOffset이 바이트 단위의 값이기 때문이고,
int *로 형변환한 이유는 int형의 값을 읽어오기 위해서입니다.
그러니까, "int 몇 개만큼 떨어진 곳에서 int를 읽어와라"가 아니라
"몇 바이트 떨어진 곳에서 int를 읽어와라"는 명령이기 때문입니다.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
연산자 우선순위
아닙니다. C에서 캐스트 연산자가 산술 연산자보다 우선순위가 높으니까 (char *)로 변환한 후 포인터 증가 연산 후 (int *)로 변환하는 것입니다. 형 변환을 두 번에 걸쳐서 하는 것이 아닙니다.
댓글 달기