Не "не совсем равнозначны", а совсем не равнозначны. Чистый гарвард: есть адресное пространство команд и есть адресное пространство данных. Каковые между собой не пересекаются совсем. Адрес команды 0x1234 и адрес данных 0x1234 - абсолютно разные вещи. Потому компиляторы Це вынуждены либо прикручивать к указателю дополнительный байт (чтобы понять, куда он собственно указывает), либо иметь два вида указателей и две копии функций. Ровно такая же фигня у 8051, PIC12 и т.д.
Не надо делать мне как лучше, оставьте мне как хорошо