#include <iostream>
using namespace std;
int main()
{
int tmpVal1 = 2023;
int tmpVal2 = 8;
int *pointerI = &tmpVal1;//주소값 대입
int *const constPointer = &tmpVal2;//read-only로 만들어버림.
cout << "tmpVal1=" << tmpVal1 << ", &tmpVal1=" << &tmpVal1 << endl;
cout << "tmpVal2=" << tmpVal2 << ", &tmpVal2=" << &tmpVal2 << endl;
cout << "pointerI=" << pointerI << ", *pointerI=" << *pointerI << endl;
cout << "constPointer=" << constPointer << ", *constPointer=" << *constPointer << endl;
cout << "-----------------" << endl;
pointerI = &tmpVal2;
//constPointer = &tmpVal1;//ERROR
cout << "(after pointerI = &tmpVal2)" << endl;
cout << "pointerI=" << pointerI << ", *pointerI=" << *pointerI << endl;
cout << "constPointer=" << constPointer << ", *constPointer=" << *constPointer << endl;
cout << "-----------------" << endl;
int *dynamicPointer = new int;
cout << "(*dynamicPointer = new int)" << endl;
cout << "dynamicPointer=" << dynamicPointer << ", *dynamicPointer=" << *dynamicPointer << endl;
delete dynamicPointer;//메모리 반납
cout << "(after delete dynamicPointer) ---> " << ((dynamicPointer==nullptr)?"NULL":"exists") << endl;
cout << "dynamicPointer=" << dynamicPointer << ", *dynamicPointer=" << *dynamicPointer << endl;
dynamicPointer = nullptr;//이거까지 해야 진짜로 없는 존재가 된다.
cout << "(after dynamicPointer = nullptr) ---> " << ((dynamicPointer==nullptr)?"NULL":"exists") << endl;
//cout << "dynamicPointer=" << dynamicPointer << ", *dynamicPointer=" << *dynamicPointer << endl;//none print
return 0;
}