short sArr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* pI = (int*)sArr;
int iData = *((short*)(pI + 2));
cout << iData;
먼저 short형 배열을 선언한다. sArr은 배열의 시작 위치를 가리키는 short형 포인터인데
pI에 int*형으로 캐스팅했다. 그리고 pI에 2를 더하는데 pI는 int*형이므로 int size의 2배, 8바이트만큼 이동한다.
short*형으로 다시 캐스팅하면 short 크기는 2바이트이므로 4칸 이동한 5를 가리키는 포인터가 된다.
그런데 여기서 short*형으로 다시 캐스팅하지 않으면 어떻게 될까?
그러면 int*형인데 크기가 4바이트이므로 5뿐만 아니라 6까지 데이터를 읽어버린다.
비트로 표현하면 4바이트는 32비트이므로
0000 0000 0000 0110 - 6을 나타냄
0000 0000 0000 0101 - 5를 나타냄

393221이라는 완전히 동떨어진 결과를 내뱉는다.
'C++' 카테고리의 다른 글
| [C++] 우선 순위 큐 정렬 방법 변경 (0) | 2023.01.31 |
|---|---|
| [C++] 부동 소수점 (0) | 2023.01.10 |
| [C++] 전역 변수, 정적 변수, 외부 변수 (0) | 2022.12.23 |
| [C++] 람다 (0) | 2022.06.25 |
| [C++] 오른값 참조(rvalue reference) (0) | 2022.06.25 |