그냥 간단하게 생각해

배열은 컴파일 타임에 사이즈를 알 수 있으니까 sizeof 로 배열 전체 사이즈를 알 수 있고

포인터는 언제 어떻게 가리키는 곳이 변할지 모르기 때문에 컴파일 타임에 크기를 알 수 없어서 sizeof 에서 포인터와 포인터가 가리킬 수 있는 자료형의 크기만 알려주는 거라고

그리고

배열과 포인터를 완전히 별개 취급해버리면 자유가 제한되기 때문에 일부 묵시적 변환과 이상한 짓거리를 상당량 허용해준거라고

어렸을 때 걍 이렇게 생각했음