Typ char w C++ służy do przechowywania pojedynczego znaku (jednej jednostki typu znakowego). Aby przypisać do takiej zmiennej konkretny znak, należy użyć literału znakowego, który w C++ zapisuje się w apostrofach, np. 'w'. Dlatego zapis zm1 = 'w'; jest poprawną instrukcją przypisania.
Zapis zm1 == 0x35; jest niepoprawny w kontekście pytania, ponieważ operator == nie przypisuje wartości, tylko porównuje dwie wartości i daje wynik logiczny. Taki zapis mógłby wystąpić w warunku, ale nie służy do ustawienia zmiennej.
Zapis zm1[2] = 32; zakłada, że zm1 jest tablicą (lub wskaźnikiem) i można go indeksować. Tymczasem zdefiniowano pojedynczą zmienną: char zm1;. Indeksowanie nie ma tu sensu i jest błędem.
Zapis zm1 = "wiadro"; używa literału łańcuchowego w cudzysłowie, czyli tekstu składającego się z wielu znaków (tablicy znaków zakończonej znakiem końca). Tego nie da się przypisać bezpośrednio do pojedynczego char, bo to inny typ danych.
Wskazówka egzaminacyjna: zapamiętaj regułę 'a' to znak, a "a" to łańcuch. Różnica jednego znaku w zapisie zmienia typ i dopuszczalne operacje.