포인터는 데이터를 그 자체로 저장하는 것이 아니라 저장하고 있는 메모리의 주소를 가지고 있다.
포인터가 지정하는 주소에 아무 데이터가 없다면 NULL이라고 표시된다.
프로그램을 짜다보면 포인터가 허용되지 않은 주소에 메모리를 참조할 때가 있는데 이를 "dangling pointer"라고 한다.
Storage Allcation
int a, *iptr, *jptr, *kptr;
iptr에 &a를 대입하게 되면 iptr가 a 변수의 메모리 주소를 참조하게 된다. 그리고 jptr = iptr를 하게 되면 jptr에 저장된 메모리 주소도 a의 메모리 주소가 되게 된다. 3번째로 *jptr=100을 하게 되면 jptr가 참조하고 있는 변수에 100을 저장하게 되므로 결국 a 변수에 100이 저장되게 된다. 따라서 *iptr를 프린트해도 a에 저장된 100이 출력되게 된다.
int func(int **iptr)
{
int a = 10;
*iptr = &a;
return 0;
}
위 예시를 보면 func( )가 실행이 될 때 a가 정의가 되는데 이를 "automatic variable"이라고 한다. automatic variable은 메모리가 자동으로 할당되었다가 함수 실행이 끝나면 자동으로 deallocate가 된다. 위 예시에서 a를 함수안에서 선언하였기 때문에 메모리가 할당이 된다. 함수 내에서 *iptr에 a 주소를 저장하면 이때는 *iptr가 가리키는 값이 10이 되지만 함수가 끝나고 나오는 동시에 a 변수의 메모리가 deallocate 되기 때문에 이후에 *iptr의 값을 확인하면 에러가 난다.
'Programming > C++ 스터디' 카테고리의 다른 글
객체지향 프로그래밍 : 상속 (0) | 2021.09.08 |
---|---|
객체지향 프로그래밍 : 생성자 (0) | 2021.09.01 |
객체지향 프로그래밍 : 클래스와 객체 (0) | 2021.08.30 |