ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 포인터 타입 캐스팅
    프로그래밍/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

    댓글

Designed by Tistory.