여기서 주의할 점은 위 상황이 다음과 같이 공백 스트링을 가리키는 것과는 엄연히 다르다는 것이다.
char const*const p2empty = "";
▲ 그림 6-8 공백 스트링을 가리키는 포인터
널 상태에 있는 포인터를 흔히 널 포인터(null pointer)C라 한다. 놀랍게도 널 포인터를 처리하는 것도 C 언어의 정식 기능이다.
TAKEAWAY 6.20 논리 표현식에서 널 포인터는 false로 평가된다.
주의할 점은 논리 표현식에서는 포인터를 유효 포인터와 미확정 포인터를 구분할 수 없다는 것이다. 따라서 포인터에서 정말 ‘나쁜’ 상태는 미확정 상태다. 상태를 정확히 알 수 없기 때문이다.
TAKEAWAY 6.21 포인터가 미확정 상태면 알 수 없는 동작(undefined behavior)이 나타날 수 있다.
예를 들어 미확정 상태인 포인터는 다음과 같다.
char const*const p2invalid;
▲ 그림 6-9 미확정 상태 포인터
이 포인터는 초기화를 하지 않았기 때문에 미확정 상태이며, 그대로 사용하면 프로그램이 알 수 없는 상태(undefined state)에 빠질 수 있다(TAKEAWAY 5.55). 따라서 포인터가 유효한지 확실하지 않으면 반드시 널로 설정하는 것이 좋다.
TAKEAWAY 6.22 항상 포인터를 초기화한다.