나의 지식 보관소
포인터 Pointer 본문
포인터란
포인터는 메모리의 주소를 저장하는 변수이다.
type형 변수의 주소 값을 저장하는 포인터 변수의 선언 방법은 아래와 같다.
type* ptr
여기서 의문이 들수 있다. 주소 값을 저장하는 변수라면 그 크기가 모두 같을 텐데 왜 굳이 서로 다른 포인터형을 쓸까?
대답은 참조를 위해서이다. 만일 주소값만 주어졌다면 우리는 그 값을 어떻게 읽어 들여야 할까? 주어진 주소 값을 시작으로 4바이트를 읽어야 할까? 8바이트를 읽어야 할까? 이렇듯 포인터형은 메모리 공간을 참조하는 기준이 된다.
널포인터
포인터를 사용할 때 선언만 해두고 초기화를 하지 않는다면 포인터에는 쓰레기 값이 존재하게 된다. 이 상태에서 역참조 연산자를 통해 값을 변경하게 되면 어딘지도 모르는 메모리 공간을 변경해버리게 된다. 이러한 작업은 시스템에 심각한 문제를 일으킬 수 있다. 때문에 포인터 변수를 선언해두고 이후에 유효한 값을 할당할 생각이라면, NULL로 초기화 해두는게 좋다. NULL은 0으로 정의되어있으므로 포인터변수를 0으로 초기화해도 무관하다.
int* ptr = NULL;
int* ptrr = 0;//1번줄과 2번줄은 동일한 역할을 한다
여기서의 0은 메모리 상의 0번지를 뜻하는 게 아니라, 아무것도 가리키지 않음을 뜻한다.
'프로그래밍 언어 > C' 카테고리의 다른 글
다차원 배열과 포인터의 관계 (0) | 2020.01.05 |
---|---|
포인터를 대상으로 하는 const선언 (0) | 2020.01.05 |
상수 형태의 문자열 (0) | 2020.01.05 |
포인터 연산 (0) | 2020.01.05 |
배열과 포인터의 관계 (0) | 2020.01.05 |