Это потому, что указатель имеет размер 32 бита, а символ - всего 8 бит.Таким образом, при преобразовании указателя в символ он усекает 24 бита.Таким образом, вероятность того, что оставшиеся 8 битов являются просто нулями, довольно высока, особенно когда адрес указателей высокий.
Что вы можете сделать, это следующее:
BOOL myBool = (myPointer != NULL); // This will evaluate if the pointer is true (>0) or false (NULL)