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