프로그래밍/C++

#28. 포인터 기초

코딩하는상후니 2022. 7. 19. 22:00

 


 
*포인터는 왜 필요한걸까 ??
 
=> 스택 메모리에 쌓이는 지역변수를 통해 실제 데이터 값을 수정하기 위해서
=> 원본 수정을 위해서.
 

 

TPYE* 변수이름;
 
int* ptr = &number;
=> 주소를 담는 바구니
 
*어셈블리 mov & lea
mov  :  값 이동
lea  :  주소 이동

 
@int* 크기
=> 8바이트 (64비트환경)   /   4바이트 (32비트환경)
 
 

 
*주소를 가지고 어떻게 동작시킬까 ??

 

int number = 1; 
int* ptr = &number; 
int value1 = *ptr; 
*ptr = 2;

 


 
* TYPE 은 왜 붙여주는 걸까 ??
=> 메모리에서 그 데이터의 크기만큼 읽기 위해서
=> 포인터에 대한 추가정보
 

 

*타입의 불일치
 
__int64* ptr2 = (__int64*)&number;
*ptr2 = 0x0000AABBCCDDEEFF;
 
=> 원래 number 는 4바이트(int) 인데 무시를 하고 주소를 저장시키고
그 값에 다른 타입의 크기로 넣게 되면 다른 메모리의 영역까지 침범할 수 있다!!
=> 메모리가 덮어쓰여질 수 있다!!
 
=> 경우에 따라선 저렇게 캐스팅을 써야할 때도 있을 수 있다.
=> 우리가 정확한 포인터의 크기만큼 사용할 수 있는것은 아니기 때문
ex) 네트워크 lock-free ...
 
 

 

본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다.

'프로그래밍 > C++' 카테고리의 다른 글

#30. 참조 기초  (0) 2022.07.19
#29. 포인터 연산  (0) 2022.07.19
#27. 함수 기타 내용  (0) 2022.07.18
#26. 호출 스택  (0) 2022.07.18
#25. 값 전달  (0) 2022.07.18