본문 바로가기

C++

[C++] 포인터 비트 단위 이해

	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