Najprościej jak się da - static_cast sprawdza co robisz i nie pozwoli zrzutować dowolnych typów, a dla reinterpret_cast'a zgadzać muszą się jedynie wielkości typów:
int i = 10;
static_cast<int*>(i); //nie zadziala int to nie int*
// zadziala o ile sizeof(int) == sizeof(int*) na twoim systemie
reinterpret_cast<int*>(i);
zrzutowany wskaźnik oczywiście nie ma najmniejszego sensu i próba jego dereferencji skonczy sie segfaultem.
Po więcej odsyłam na stacka: https://stackoverflow.com/a/41082284/9392216