Почему разные типы указателей для разных типов данных в c?

Если нам нужно хранить адрес любого типа данных, нам нужен указатель этого типа данных. Но указатель - это просто адрес, а адрес всегдаint типа, тогда почему для хранения адреса любого типа данных требуется указатель этого типа?