if сравнивает не указатели, а числовые значения, в том числе и вычисляемые с обеих сторон от знака двойного равенства. Тогда как switch может вычислять и сравнивать switch-выражение только с набором case-констант. Сравнивать между собой адреса бессмысленно, вне зависимости от того, с помощью switch это делается или с помощью if.