(Я цитирую ISO/IEC 9899: 201x)
Здесь мы видим, что целочисленное константное выражение имеет целочисленный тип:
6.6 Константные выражения
6. Целочисленное константное выражение должно иметь целочисленный тип и должно иметь только операнды которые являются целыми константами, константами перечисления, символьными константами, sizeof выражения, результаты которых являются целыми константами, _Alignof выражениями и плавающими константы, которые являются непосредственными операндами приведения. Операторы Cast в целочисленной константе выражение должно преобразовывать только арифметические типы в целые типы, за исключением как части операнд к оператору sizeof или _Alignof.
Тогда это справедливо для любого целочисленного типа:
6.2.6.2 Целочисленные типы
5. Значения любых битов дополнений не определены. Действительное (не-ловушечное) представление объекта знакового целочисленного типа, где знаковый бит равен нулю, является действительным объектным представлением соответствующий неподписанный тип, и должен представлять одно и то же значение. Для любого целочисленного типа, представление объекта, где все биты равны нулю, представляет собой представление значения нуль в этом типе.
Затем мы видим, что константа нулевого указателя определяется с использованием целочисленного постоянного выражения со значением 0.
6.3.2.3 Указатели
3. Целочисленное постоянное выражение со значением 0 или такое выражение, отлитое для типа void *, называется константой нулевого указателя. Если константа нулевого указателя преобразуется в тип указателя, полученный указатель, называемый нулевым указателем, гарантированно сравнивает неравные к указателю на любой объект или функцию.
Поэтому константа нулевого указателя должна иметь все биты, установленные на ноль.
Но есть много ответов в Интернете и на StackOverflow, которые говорят, что это неверно.
Мне тяжело полагать, что они дали цитаты.
(Пожалуйста, ответьте, используя ссылки на последний стандарт)