#include <iostream>

using namespace std;

int main() {
	//변수 선언 과정 

	int val = 3;

	cout << &val << endl; //0000005C4AF9FA74  주소값이 나오게 된다.

	//C++ : 객체지향 프로그래밍
	//컴파일 시간이 아닌 실행 시간에 어떠한 결정을 내릴 수 있다.
	
	// 배열을 생성한다 했을떄
	// 재래적 절차적 프로그래밍 : 배열의 크기가 미리 결정
	// 객체지향 프로그래밍 : 배열이 크기를 실행 시간에 결정할 수 있다. @
		// 값이 변할 수 있는 변수로 배열의 크기를 결정할 수 있다고 볼수있다.
}
#include <iostream>

using namespace std;

int main() {
	//변수 선언 과정

	//포인터 : 사용할 주소에 이름을 붙인다.
	//즉, 포인터는 포인터의 이름이 주소를 나타낸다.
	//간접값 연산자, 간접 참조 연산자 라고 불리는 * 기호를 사용한다.

	int *a;	// C 스타일
	int* b;	// C++ 스타일
	int* c, d;	// c는 포인터 변수, d는 int형 변수로 선언된다.

}
#include <iostream>

using namespace std;

int main() {

	int a = 6;	//수
	int* b;		//위치 - b는 자체로 주소를 나타낸다

	b = &a;	//a의 주소값을 b에 삽입

	cout << "a의 값 " << a << endl;
	cout << "*b의 값 " << *b << endl;

	cout << "a의 주소 " << &a << endl;
	cout << "b의 주소 " << b << endl;

	*b = *b + 1;

	cout << "이제 a의 값은 " << a << endl;
	/*
		a의 값 6
		*b의 값 6
		a의 주소 00000001000FFBA4
		b의 주소 00000001000FFBA4
		이제 a의 값은 7
	*/
//의미있는 코드는 아니다.

//프로그램을 실행하는 동안에 이름이 없는 메모리, 아직 결정되지 않는 메모리를 대입할 수 있다는게
//포인터의 진정한 쓸모이다.
}