포인터 기초

CJB_ny·2022년 8월 3일
0

C++ 정리

목록 보기
30/95
post-thumbnail
post-custom-banner
int number = 1;

int* numAddr = &number;

의 메모리를 보면은

이게 지금 number의 스택메모리 주소값이다.

" 0x000000A831B8F994 "

이안에 지금 0x00000001 이 들어가있음

그러면 포인터를 보도록 하자.

이게지지금 포인터 변수의 스택 메모리 주소값인데

엔디안에따라 값이 거꾸로 있기 때문에

000000a831b8f994 이다.

값으로는

" 000000a831b8f994 "를 들고있다.

주소값변수명
&number = " 0x000000A831B8F994 "number1
&numAddr = " 0x000000A831B8F9B8 "numAddr0x000000a831b8f994

즉 포인터 변수는 값으로 number의 주소값을 가르킨다.

또한 운영체제에 따라 포인터 변수의 크기가 달라지는데

32bit -> 4바이트의 크기

64비트 -> 8바이트 크기

그래서 지금 포인터 변수의 값들이 8바이트로 잡힌것이다.

지금 내가 64비트로 실행하기 때문에.

'*'

ptr이 지금

주소변수명
0x000000a123456789ptr0x000000a212121212

이라고치면

*ptr은 주소를 저장하는 변수인 ptr의 값 부분(0x000000a212121212)에 접근해라! 라는 의미이다.

그래서 value = 해당 주소에 접근해서 데이터를 꺼내서 value에 넣어준 것이다.

어셈블리 뜯어보기

지금 [ ] 이게 주소에 접근을 하는 것이다.

mov eax, dword ptr [ptr]

ptr의 주소에 접근을 해서 주소를 eax에 복사

[eax] 의 주소에 접근ㅇ 르해서 그 주소갑슬 ecx에 mov한다.

이정도..

profile
https://cjbworld.tistory.com/ <- 이사중
post-custom-banner

0개의 댓글