안녕하세요. 취업한 공대누나입니다.
이번 시간에는 지난 시간에 이어 포인터에 대해 이어서 공부해보도록 하겠습니다.
포인터란 주소를 값으로 가지는 변수라고 설명을 했습니다.
포인터를 사용할 때에는 반드시 포인터가 가리키는 그 주소에
데이터가 존재하고 있어야 합니다.
즉, 초기화를 시키고 사용해야 한다는 뜻인데요.
다른 변수를 사용할 때도 마찬가지로 포인터 또한 초기화를 시켜줘야 합니다.
1. NULL 포인터
포인터를 초기화 할 때에는 NULL을 이용해서 합니다.
NULL 포인터는 어떤 자료형의 포인터에도 저장할 수 있습니다.
NULL이 들어있는 포인터를 우리는 널 포인터라고 말합니다.
그리고 아무것도 가리키고 있지 않은 상태를 뜻합니다.
2. 배열과 포인터
크기가 5인 int형 배열을 선언하고 각 값에 1,2,3,4,5를 대입했습니다.
그리고 포인터에 배열의 이름에다가 1을 더해주었습니다.
그랬을 때 p가 가리키는 값이 1인것을 출력을 통해 확인할 수 있습니다.
그리고 p를 출력해보면 주소값이 잘 나와있는데요.
p-1은 a[0]의 주소를 나타내는 것 이해가 되시나요?
그림으로 나타내보면 아래와 같습니다.
P라는 것이 가리키고 있는 것은 배열 a[1]입니다.
그리고 당연하게 p에는 포인터이므로 주소 값이 들어가있게 되는 것이죠.
이제 어느 정도 감이 잡히시나요?
포인터를 이용해 배열의 요소에 접근을 할 수도 있습니다.
a[]를 이용해서 값을 출력한 것이 아니라 포인터를 이용하여 접근을 해보았습니다.
처음에는 포인터라는 개념을 받아들이기 어려우실 수도 있는데
이렇구나~하고 넘어가시고 여러번 반복해서 보시는 것도 좋습니다.
포인터를 이용해서 배열 값을 출력하는 방법이 다양하게 있구나라고
생각해주셔도 좋습니다.
3. 배열의 이름
배열의 이름은 (여기서는 a가 됩니다.) 배열의 첫번째 요소를 가리키는 포인터의 역할을 합니다.
하지만 포인터는 변수이고 배열의 이름은 상수이기 때문에 배열의 이름에다가 주소 값을 대입시킬수는 없습니다.
간단하게 예제로 보여드리면 아래와 같은 상황은 안되는 것입니다.
4. 배열과 포인터가 차지하는 공간
sizeof를 이용하여 배열과 포인터가 차지하는 공간에 대해 알아보도록 하겠습니다.
위의 예제에서 sizeof(a)와, sizeof(p)를 각각해보면 값이 어떻게 될까요?
예상이 되시나요?
답은 아래와 같습니다.
배열이 차지하는 전체 공간의 크기는 4바이트씩 5개가 있으므로 20이 됩니다.
그리고 포인터 변수또한 포인터 변수의 크기 자체인 4가 출력이 됩니다.
이렇게 오늘은 포인터의 기본적인 내용에 대해 마저 알아보았습니다.
굉장히 헷갈릴 수 있지만 실제로 실습을 반복해서 여러번 하다보면
느낌을 잡으실 수 있습니다.