#include <iostream>
using namespace std;
int main() {
//new 연산자
/*
어떤 데이터형을 원하는지 new 연산자에게 알려주면,
new 연사자는 그에 알맞은 크기의 메모리 블록을
찾아내고 그 블록의 주소를 리턴한다.
*/
//첫 번째 방법
int a;
int* b = &a;
// b를 통해서도 a를통해서도 둘다 접근할 수 있다.
//두 번째 방법
int* pointer = new int;
//포인터 변수 하나만 인트형 값에 접근할 수 있는 유일한 방법
//new 는 int를 보고 몇 바이트가 필요한지 알아낸다 (4바이트)
//그걸 찾아내서 pointer 변수에 초기화 해준다.
//pointer가 데이터의 객체를 지시하고있다 고 표현할 수 있다.
}
#include <iostream>
using namespace std;
int main() {
//delete 연산자
/*
사용한 메모리를 다시 메모리 풀로 환수
환수된 메모리는 프로그램의 다른 부분이 다시 사용
*/
int* ps = new int;
//메모리 사용
delete ps;
//new 를사용하고 delete를 사용해줘야한다.
//하지않는다면 메모리 누수가 발생할 수 있음.
/*
1. new로 대입하지 않은 메모리는 delete로 해제할 수 없다.
2. 같은 메모리 블록을 연달아 두 번 delete로 해제할 수 없다.
3. new[] 메모리를 대입할 경우 delete[]로 해제한다.
4. 대괄호를 사용하지 않았다면 delete도 대괄호를 사용하지 않아야 한다.
*/
}
#include <iostream>
using namespace std;
int main() {
double* p3 = new double[3]; //double형 데이터 3개를 저장할 수 있는 공간을 대입한다.
p3[0] = 0.2; //p3를 배열 이름처럼 취급한다.
p3[1] = 0.5;
p3[2] = 0.8;
cout << "p3[1] is " << p3[1] << endl;
p3 = p3 + 1; //포인터를 증가시킨다.
//+1은 더블형 데이터 공간 한개로 인지된다.
//그래서 p[0]은 전의 p[1]값을 가르키게 된다. 흠..왜? 이렇게 쓸까
cout << "Now p3[0] is " << p3[0] << " and ";
cout << "p3[1] is " << p3[1] << endl;
p3 = p3 - 1; //다시 시작 위치를 지시한다.
delete[] p3; //배열 메모리를 해제한다.
//cin.get();
}