✅ NULL도 형이 있다?!

널 포인터를 T형의 포인터로변환하면

널포인터(void*)0이 아니라

(T*)0

해당 유형의 널 포인터로 바뀐다.

오호라!

NULL 포인터의 몇 가지 중요한 점 C 표준에 따르면 0도 널 포인터 상수입니다. 유효한 진술입니다. “ int *ptr = 0 ; ” 그리고 “ptr”은 널 포인터입니다. 객체나 함수를 가리키는 포인터의 널 포인터를 비교하면 비교 결과가 동일하지 않게 됩니다. 초기화되지 않은 포인터는 그러한 유형의 보장을 제공하지 않습니다. 널 포인터를 "T" 유형의 다른 포인터로 변환하면 결과 포인터는 해당 유형 "T"의 널 포인터가 됩니다. C에서는 모든 유형의 두 개의 널 포인터가 동일한지 비교하는 것이 보장됩니다. C에서 NULL 포인터를 역참조하려고 하면 분할 오류가 발생합니다. T가 널 포인터인 경우 &*T는 T와 동일합니다.

✅ NULL 끼리 비교할수 있을까?

그래서 비교를 허용하지 않는것이다.

그래도 함 해볼까?

student_t* david= null;
student_t* paul= null;
teacher_t* jane= null;
if(david==jane) { // 요걸 허용 안한다는 거지
}

if(david==paul) { // 그럼 요건 되나? 안해봤다. 함 해보자.
}
int *pb= 0; // 이게 된다고? 함 해보자. 안될거 같은데?