포인터는 메모리의 주소값을 저장하는 변수이다.(시작주소만 저장)
주소를 가리키는 변수라고 하여 포인터(가리키는 것. 가리킴을 받는 것이 아니다)라고 하는 것이다.
주소값의 크기는 동일하기 때문에 포인터의 크기는 모두 똑같다. ( x32면 4바이트, x64면 8바이트)
Q. 크기가 똑같은데 굳이 왜 자료형을 써주는가?
- 데이터를 불러올 때에 얼마만큼 불러와야 하는지 알수 없기 때문이다.
포인터의 자료형에 따라서 불러올 데이터의 크기가 결정된다.
int : 시작주소부터 4바이트 읽어라.
char : 시작주소부터 1바이트 읽어라.
기존의 변수를 선언해주면 이는 메모리 구조상의 스택
에 저장이 된다.
이는 함수가 끝나면 알아서 초기화가 되지만.
동적할당을 해주었을 때는 데이터가 힙
영역에 저장되어
따로 초기화를 해주지 않는 이상 계속해서 남아있다.
이는 메모리 누수(memory leak)
의 원인이 될 수 있기 때문에
잘 관리해주어야 하는 단점이 있지만
데이터를 오랫동안 남겨야 하는 상황이 있을 수도 있고
또 동적할당은 사용자가 원하는 시점에 메모리를 할당해줄 수 있다는 장점도 있다.
int *ptr; ptr = malloc(sizeof(int)); // ptr 포인터 변수에 malloc함수를 통해서 4바이트(int) 만큼의 메모리를 동적할당해주는 모습