C++ Rookiss Part1 C++ 프로그래밍 입문 : 포인터 기초 복습
🙇♀️포인터 기초 복습
🪐포인터의 기본 개념
포인터는 원본 수정을 하기 위한 아이템! 전역으로 선언된 것뿐만 아니라 스택에 들어있는 것들도 함수 내에서 수정 할 수있다.(주소를 전달해서)
포인터 = [주소를 저장하는 바구니다!], (4바이트 or 8바이트)고정크기!
- 포인터의 요소
- *
- TYPE
- *
int number = 1; // 일반 변수 선언
int* ptr = &number; // 포인터 변수 선언 및 number의 주소 저장
*ptr = 2; // ptr이 가지고 있는 주소로 타고 가서 2대입
- 변수 선언(주소를 저장하는 바구니다!)
- 사용할 때 (포탈 타고 순간이동)
- TYPE
TYPE은 왜 붙여줄까? => 포인터에 대한 추가 정보를 준다
주소를 타고가면 뭐가 있는지 모르기에 (char, int, float, double …) 이것에 대한 힌트를 준다.
포인터의 주소는 고정크기이지만 주소를 따라가서 몇바이트를 꺼내느냐에 따라 해석이 완전히 달라진다.
- 타입 불일치
int number = 1; // int 변수 선언
__int64* ptr2 = (__int64*)&number; // int변수를 가르키는 포인터 변수가 __int64라고 속이는 경우
*ptr2 = 0x0000AABBCCDDEEFF; // 주소를 타고가서 0x0000AABBCCDDEEFF란 값을 대입한다
결과 : 원래 number가 가지고있을 메모리 공간을 넘어서서 데이터를 덮어쓰고 있다.
- 간단한 포인터 사용 맛보기
void SetHp(int* hp) // 매개변수로 포인터 변수 사용
{
*hp = 100; // 포인터를 따라가서 100대입
}
int main()
{
int hp = 1;
SetHp(&hp); // 매개변수 사용시 주소를 대입
}