В стандарте мало что говорится о размерах и выравнивании указателей, и поэтому они не строго ограничены языком.
Преобразование одного действительного указателя в функцию в другой и обратно гарантирует получение исходное значение. Таким образом, должно быть такое же минимальное количество значений, которые должны быть представлены, что является максимальным количеством допустимых адресов для любого заданного указателя на тип функции, который дает нижнюю границу размера всех указателей на типы функций.
Преобразования между типами объектов имеют аналогичную гарантию, которая, однако, применяется только тогда, когда исходный заостренный тип имеет более строгие или равные требования к выравниванию. Как следствие, указатели объектов на строго выровненные типы требуют меньшего количества представимых значений. Если выравнивание достаточно высокое, тип теоретически может быть меньше. указатели на функции и указатели на void должны быть одинаковыми.
Но даже в этом случае некоторые типы указателей могут быть больше, чем количество представляемых им значений. Эти дополнительные биты просто обязательно не будут использоваться. Это было бы не очень практично.