'C_Language > Tips' 카테고리의 다른 글
포인터에서 강제로 자료형 변환하기 (강제형변환) 캐스팅 (0) | 2019.01.21 |
---|
포인터에서 강제로 자료형 변환하기 (강제형변환) 캐스팅 (0) | 2019.01.21 |
---|
안녕하세요 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이 출력이 됩니다!.
즉* (자료형*) 은 포인터변수가 가리키는 대상의 크기를 강제로 형변환.!
*(자료형*)은 포인터변수가 가리키는 대상을 원하는 자료형만큼 끊어서 읽기
한번 테스트 해보시기 바랍니다.! 꿀잼.!
동적 메모리 할당! (0) | 2019.01.23 |
---|