**- 포인터 : 주소 값을** 값으로 가지는(가리키는) 타입
- 0x23Fd1A …

**- int : 정수를** 값으로 가지는 타입
- -2, -1, 0, 1, 2 …

**- float : 실수를** 값으로 가지는 타입
- 0.5, 0.08, 1.2 …

int a = 0;

- **포인터에 주소값을 주려면 변수를 선언해야 한다.**
- int* pA = &a; //타입* 변수명 = &값;

- **포인터를 쓰는 이유** : 중가로 안에서 변수가 선언이 되면(int B;) 에서 중가로가 해제되면 
	메모리가 자동으로 해제가 된다.

-> 중가로 밖에서 값을 바꾸려고 시도해도 불가능 하다.

-> 그래서 func(함수) 가 사용된다.

void changeValue(int value)
{
	vaule = 30;
}
- **이 함수를 사용해서 외부 함수에서**

int main()
{
	int ChangeValue = 20;
}
을 한다고 해도 C의 값이 30이 안나온다.
왜냐하면 중가로 안쪽에서 매개변수를 똑같이 선언한다음에 int value 에 값을 넣어준다고
생각해야 한다.

ChangeValue 함수 내용이 내부에서 선언 된다. -> 외부에서 내부로 영향을 줄 수 없다.
그러므로 포인터를 사용한다.

void changeValue(int***** value)
{
	int* value = 0x1111;
	(*vaule) = 30;
}

int main()
{
	int a = 20;
	ChangeVaule = &a;
}

해당 메모리의 값을 바꿔줬기 때문에 C의 메모리 주소에 갔다.
-> 함수 내부에서 값을 바꾸는게 가능해 진다.
**Template**

Generic 이라는 용어를 많이 사용한다
-> 데이터 타입에서 자유로워 지고 싶은 것.
-> 내가만드는 class 에서 함수를 자유롭게 쓰고 싶은 것.

- int sum(int a, int b) //이런 함수를 만든다고 생각해보자.
{
	return a + b;
}

데이터타입 : float, double, long ... 다양하게 있다.
-> int 외 타임으로 똑같은 내용이 있는 함수를 만들고 싶을 때.. //너무 코드가 길어진다.

짧게 만들기 위해 만들어 진것이 함수 template 이다.

template<T>
T sum(T a, T b)
{
	return a + b;
}
에서 int 를 쓰고싶다? -> 대문자 T가 int 에 대응 되게한다.
float 를 쓰고싶다? -> 대문자 T가 float 에 대응 되게한다.