본문 바로가기

프로그래밍/C 기초

[C언어 강좌] #40 NULL 포인터


오늘 강좌는 깜빡하고 조금 늦어버리고 말았네요 ㅋㅋㅋ

어차피 시간맞춰서 꼬박꼬박 보는사람도 없을거라 생각하지만요.


아무튼 이번에는 NULL포인터입니다.


포인터를 처음 선언할때는 기본적으로 쓰레기값을 가지고있습니다.

그래서 초기값을 넣어줘야하지요. 근데 선언만 해놓고 가리킬 공간이 딱히 없다면?


아니면 가리키던공간이 쓸모없는 메모리공간이 됐다면?

포인터가 가리킬곳을 다시 정해줘야하는데 그럴 방법이 없죠.

만약 포인터가 쓰레기값을 가지고있을때 그 포인터가 가리키고있는 메모리공간에 무언가를 하면 치명적인 일이 일어날지도 모릅니다.

우연히 그 메모리공간이 프로그램에서 매우매우 중요한 메모리공간이였다면 치명적인 버그가 터질수 있습니다.


그럴때 사용되는것이 NULL포인터입니다.

NULL은 stdio.h를 보면 이렇게 정의되어있습니다.



define은 나중에 배우게될 전처리기중 하나인데 간단히 말하자면 NULL을 0으로 바꾼다! 라고 알아두시면 됩니다.

NULL이라는 글자를 써놓으면 컴파일러가 알아서 0으로 바꿔서 해석해주는겁니다.


즉 상수값입니다. 

하지만 포인터는 원래 상수와는 연산할 필요가 없습니다.



그렇기때문에 실제로 이렇게 컴파일해보면 컴파일은 되지만 경고메시지가 나오네요.

실제로 우리는 12345번지가 뭐하는놈인지도 모릅니다. 그렇기때문에 비교할필요도 없고 대입할필요도 없습니다.

하지만 NULL은 예외적으로 경고처리를 주지 않습니다.


포인터가 0번지를 가리키고있으면 그것은 아무것도 가리키고있지 않다는것을 의미합니다.

그리고 strchr함수라는 문자열에서 원하는 글자를 찾는 함수도 원하는 글자가 없을때는 NULL값을 반환합니다.

만약 NULL일경우에는 원하지 않는 작동이기때문에 오류처리를 해주면 되겠죠.