calloc
устанавливает все байты выделенной памяти на ноль.
Как это бывает, это также допустимый IEEE754 (который является наиболее распространеннымформат значений с плавающей запятой на компьютерах) представление для 0.0
.
IIRC. В спецификации C нет части, требующей реализации для использования IEEE754, поэтому, чтобы быть разборчивым, она не переносима.В действительности, однако, это так (и если вы когда-нибудь собираетесь работать с системой, отличной от IEEE754, у вас должен был быть достаточный опыт, чтобы уже знать это и решать такие проблемы).
Также обратите внимание, чтоэто также верно для указателей.Во всех системах, с которыми вы можете соприкасаться, нулевой указатель должен быть равен 0
.Но могут быть системы, в которых это не так, но если вы работаете в таких системах, вы уже должны знать об этом (и если вы используете NULL
, тогда это не должно быть проблемой).