#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
*/
//의미있는 코드는 아니다.
//프로그램을 실행하는 동안에 이름이 없는 메모리, 아직 결정되지 않는 메모리를 대입할 수 있다는게
//포인터의 진정한 쓸모이다.
}