🙇‍♀️포인터 기초 복습


🪐포인터의 기본 개념

포인터는 원본 수정을 하기 위한 아이템! 전역으로 선언된 것뿐만 아니라 스택에 들어있는 것들도 함수 내에서 수정 할 수있다.(주소를 전달해서)

포인터 = [주소를 저장하는 바구니다!], (4바이트 or 8바이트)고정크기!


  • 포인터의 요소
    • *
    • TYPE


  1. *
int number = 1; // 일반 변수 선언

int* ptr = &number; // 포인터 변수 선언 및 number의 주소 저장

*ptr = 2; // ptr이 가지고 있는 주소로 타고 가서 2대입
  • 변수 선언(주소를 저장하는 바구니다!)
  • 사용할 때 (포탈 타고 순간이동)


  1. TYPE

TYPE은 왜 붙여줄까? => 포인터에 대한 추가 정보를 준다

주소를 타고가면 뭐가 있는지 모르기에 (char, int, float, double …) 이것에 대한 힌트를 준다.

포인터의 주소는 고정크기이지만 주소를 따라가서 몇바이트를 꺼내느냐에 따라 해석이 완전히 달라진다.


  1. 타입 불일치
int number = 1; // int 변수 선언

__int64* ptr2 = (__int64*)&number; // int변수를 가르키는 포인터 변수가 __int64라고 속이는 경우

*ptr2 = 0x0000AABBCCDDEEFF; // 주소를 타고가서 0x0000AABBCCDDEEFF란 값을 대입한다

결과 : 원래 number가 가지고있을 메모리 공간을 넘어서서 데이터를 덮어쓰고 있다.


  1. 간단한 포인터 사용 맛보기
void SetHp(int* hp) // 매개변수로 포인터 변수 사용
{
    *hp = 100; // 포인터를 따라가서 100대입
}

int main()
{
    int hp = 1;
    SetHp(&hp); // 매개변수 사용시 주소를 대입
}

태그:

카테고리:

업데이트: