(Schowałem drugie pytanie, bo to efektywnie to samo pytanie zadane innymi słowami. Nie spamuj proszę pytaniami, to zmniejsza szansę że na którekolwiek dostaniesz odpowiedź.)
1 ->
więc obie zmienne to obiekty przechowujące wartość zero tylko innego typu
A nie można porównywać zmiennych niekompatybilnych typów.
Bezpośrednie porównanie `wsk == 0` to jedyny wyjątek, bo literał 0 w kontekście w którym oczekiwany jest wskaźnik, jest traktowany (upraszczając) nie jako int, a jako null pointer tego typu. Więc jest to "porównanie wskaźnika ze wskaźnikiem" a nie "porównanie wskaźnika z intem", więc nie łamie reguły.
2 ->
Z tego co wiem* to nie ma znaczenia. Żeby porównać z null pointerem, nawet jeśli ma bitową reprezentację 0xDEADBEEF, wciąż użyjesz `== 0`, `== NULL` lub lepiej, `== nullptr`. Bo znowu - 0 tutaj nie oznacza że to binarna wartość 0, tylko że to null pointer.
* ponieważ platformy z niezerowym nullem to skrajny wyjątek i bardziej ciekawostka historyczna, więc mało kto się nad tym zastanawia.