# 포인터 ![image](https://hackmd.io/_uploads/S1FuCybjp.png) ``` 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; ```