빡대가리 새끼들아

내 해설 보고 포인터 제대로 이해해라 븅신들


(32비트 프로그램)


long long x  = 0;


int* pint = (int*)&x;


*pint = 0x12345678;


unsigned int Address = (unsigned int)pint;


Address +=4;


char* pByte = (char*)Address;


char Result = *pByte;



1줄. 8바이트고 이름이 x인 정수 하나를 정의하고 0으로 초기화

2줄. pint 라는 4바이트 정수 포인터 변수가 x의 주소를 가리키도록 함

3줄. pint를 역참조 즉 변수 x에 0x12345678 값을 저장함

4줄. 4바이트 정수인 Address 를 정의하고 이 값에 pint의 값 즉 x의 주소를 포인터 변수에서 정수 변수로 캐스팅해서 넣어줌

--> 포인터는 주소값이고 32비트 프로그램에서 크기가 4바이트임

그러므로 4바이트 정수 Address에 정확히 주소가 저장될 수 있음

5줄. Address 에 4를 더한다. 이러면 주소가 4만큼 증가하므로 원래 가리키던 곳에서 4만큼 떨어진 곳을 가리킴

6줄. Address를 char*로 형변환해서 포인터 변수 pByte에 저장

7줄. pByte가 가리키는 곳에서 값을 읽어와 Result 변수에 저장


답은 16진수로 0x00 임


왜냐하면


long long 탑입인 x를 0 으로 초기화 했으니

16진수로 0x0000 0000 0000 0000 임 


이 변수에 0x12345678을 저장함 


근데 리틀엔디언이라서 값이 역으로 저장된다.


78 56 34 12 00 00 00 00 임


Address의 초기값은 78을 가리켰는데 여기에 4를 더하니

4만큼 더 간 0x00을 가리키게 됨 


그래서 답이 0x00임