#include <iostream>
using namespace std;
// 오늘의 주제 : 포인터
int main()
{
// 지금까지 사용한 방식
// number 라는 이름의 4바이트 정수 타입의 바구니를 만든다
// number라는 변수 --> 스택 메모리에 할당
// number = 1 --> number라는 바구니에 1이라는 숫자를 넣는다는 의미
// 따라서 스택 메모리에 있는 특정 주소(number 바구니)에 우리가 원하는 값을 넣은 셈
// number는 비유하자면 메모리에 이름을 붙인 것
int number = 1;
// Type* 변수이름;
// 2가지 요소
// - Type
// - *
// 바구니는 바구니인데..
// [주소를 저장하는 바구니다!]
// 변수 선언할 때 * 등장했다 -> 포인터 = 주소
// 참고) 포인터라는 바구니는 4바이트(32비트) or 8바이트(64비트) 고정 크기
int* ptr = &number;
// 근데 남의 주소를 갖고 뭘 하라는거지?
// 추가 문법 : [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가를 해라!
// *변수이름 = 값;
// * -> 포탈을 타고 순간이동 한다고 생각
// *이 여러번 등장하니 헷갈리넨드, 사용 시점에 따라서 구분해서 기억하자
// - 변수 선언 (주소를 저장하는 바구니)
// - 사용할때 (포탈을 타고 순간이동)
int value1 = *ptr;
*ptr = 2;
return 0;
}

&ptr

값을 비교해보자

int value 의 경우 ptr의 값만을 가져오게됨
value1의 주소를 확인하면 ptr과 관련이 없는 것을 확인할 수 있게됨
하지만 값은 1이 할당됨


*ptr을 통해 값을 변경하게되면 number에도 영향을 미침
