Если это имеет значение, вы, вероятно, делаете что-то небезопасное и непереносимое.
Да, вызов memset
установит для любых битов заполнения (или байтов) значение 0, но на языке нет гарантии, что установка объекта float
в значение all-bits-zero установит его в 0.0. То же самое относится и к указателям: нулевые все-биты не обязательно являются нулевыми указателями. (В обоих случаях это справедливо для большинства реализаций.)
Исходный стандарт ISO C90 или C99 даже не гарантировал, что ноль со всеми битами является действительным представлением 0 для целочисленных типов; одно из Технических исправлений после C99 добавило такую гарантию (только для целых типов).
Для переносимости, если вы хотите, чтобы что-то было равно нулю, установите это явно. Вы также можете воспользоваться инициализацией с нулевым значением для статических объектов и для пропущенных членов в инициализаторах.
Терминологическая мелочь: «биты заполнения» являются частью представления целочисленных типов (и обычно их нет). Заполнение между членами структуры - это заполнение байтов .