-
포인터 타입 캐스팅프로그래밍/C, C++ 2019. 4. 30. 00:25
타입 캐스팅
타입 캐스팅이란!?
자료형 변환이다. 자동으로 타입 캐스팅되는 것이 있고 강제로 해야줘야되는 것이 있다.
int num = 10; double db; db = (double)num / 3; // db = 3.333, num을 강제로 double형으로 바꿔서 계산 db = num / 3; // db = 3.0000, int / int 는 int라서 db에 3저장
포인터 타입 캐스팅
포인터 타입캐스팅은 바라보는 거를 바꾼다! (..?)
int main(){ int a = 0x12345678; char *ptr = (char *)&a; // a를 바라보는 크기를 char의 크기만큼으로 바꾸고 바라본다! printf("%x", *ptr); }
그림으로도 이해가 안될지도 모르겟습니다
int a = 0x12345678이다
리튼 엔디안(little endian)으로 인해 메모리안에는 위와 같은 그림으로 들어갑니다
읽을때는 맨뒤부터 1바이트씩 순차적으로 읽어, a는 12 34 56 78됩니다.
char *ptr = (char *)&a;
char *가 바라보는 크기는 char의 크기인 1바이트씩 바라봅니다.
그래서 a의 주소를 캐스팅해서 바라보면 a를 1바이트만 바라보면서
위의 사진처럼 처음 1바이트인 78을 가리키게 됩니다..
문제
아래의 실행결과는!?
int a = 0x12345678; printf("%x ", *((char *)&a + 2);
34입니다!
이해가 안되시면 댓글달아주세요!질문이나 잘못된 점을 댓글 달아주시면 바로 피드백하겠습니다!
'프로그래밍 > C, C++' 카테고리의 다른 글
리틀 인디언과 빅 인디언 (0) 2019.05.03 포인터 타입 캐스팅(void 포인터) (0) 2019.05.02 함수 포인터 (0) 2019.04.26 포인터와 배열1 (0) 2019.04.21 포인터와 배열2 (0) 2019.04.21 댓글