# 포인터

```
int a = 10
```
- 메모리 0x152839 위치에서 부터 4 바이트의 공간에 있는 데이터를 10 으로 바꾸어라!
## 포인터 정의
- 메모리 상에 위치한 특정한 데이터의 (시작)주소값을 보관하는 변수
- 포인터는 주소 값을 보관하는 데이터의 형에 * 를 붙임으로써 정의된다.
- * 역할: 나(포인터)를 나에게 저장된 주소값에 위치한 데이터로 생각해줘!
```cpp
int *p; int a;
p = &a;
a = 2;
printf("a 의 값 : %d \n", a); // 2
printf("*p 의 값 : %d \n", *p); // 2
```
- & 연산자로 특정한 데이터의 메모리 상의 주소값을 알아올 수 있다.
- 포인터 p 에 어떤 변수 a 의 주소값이 저장되어 있다면 포인터 p 는 변수 a 를 가리킨다 라고 말한다.
### 포인터에 왜 타입이 있을까
- 포인터에 int 타입 변수 a의 주솟값이 들어가 있다고 할 때 포인터의 타입이 a의 타입인 int가 아니라면 컴퓨터는 메모리에서 얼마만큼 읽어야 하는지 알 수가 없기 때문이다.
- 포인터에는 시작 주소를 저장한다.
- 아래 int 를 보고 이 포인터가 int 데이터를 가르키는구나 라는 걸 알고, 시작 주소로부터 정확하게 4바이트를 읽어 값을 바꾸게 된다.
```cpp=
int *p;
```