안녕하세요 stimpack 입니다.!    


오늘은 캐스팅에 대해서 알아보는 시간을 갖도록 하겠습니다.! 



자료형에서의 형 변환은 자동 형 변환과 강제 형 변환이 있습니다.


우선 여기서는 포인터를 사용할때 자료형을 강제로 형 변환하는 캐스팅에 대해 알아 보겠습니다.!


char stim= 0x1234를 선언했습니다. 크기가 1byte인 변수기 때문에 정수 1 2 는 짤리고 3 4만 저장되겠죠!


여기서 포인터 변수 cp를 선언하고 stim변수의 주소를 가리키게 선언했습니다.(포인터변수는 32bits운영체제에서 다루는 주소의 크기는 4byte입니다)


하지만 오류가 출력 되는데 이유는 서로의 형이 다르기 때문입니다. 


2019/01/15 - [C_Language] - 20th Tips Programming 4회차 -20190114 (참고하세요)


그래서 강제로 형 변환을 해줍니다. 


short *cp = (short*)&stim;   이렇게 변수앞에 (short*)를 사용해주면 가르키는 대상인 stim 변수를 short으로 형변환 해주게 됩니다.


이러면 밑에 예제를 보시면 에러가 사라집니다.! 




int pack 는 12345678이 저장되고 포인터 *ip는 pack 변수를 가리키게 됩니다. 



cp = (short *)ip;   이렇게 선언해줍니다! (설명은 위에 소스에 있습니다.)


이 명령을 통해 포인터 변수 cp 와 ip는 변수 pack를 가리키게 됩니다. 


이제  printf("%x\n", *(short*)ip);

printf("%x\n", *(int*)cp);

printf("%x\n", *(short*)cp);


명령문을 통해 테스트를 해봅니다.  여기서 *(자료형*)ip 는 가르키는 대상을 원하는 자료형만큼 끊어서 읽게 됩니다.


(c언어는 리틀인디안 방식임으로 데이터가 거꾸로 저장됩니다. )


만약 printf("%x\n", *(short*)ip) 라고 하면 5678이 printf("%x\n", *(int*)ip) 라고 명령하면 12345678이 출력이 됩니다!. 



즉*  (자료형*) 은  포인터변수가 가리키는 대상의 크기를 강제로 형변환.! 

    *(자료형*)은 포인터변수가 가리키는 대상을 원하는 자료형만큼 끊어서 읽기


한번 테스트 해보시기 바랍니다.! 꿀잼.! 

'C_Language > Tips' 카테고리의 다른 글

동적 메모리 할당!  (0) 2019.01.23

+ Recent posts