На самом деле ваша попытка немного вводит в заблуждение, memset работает на байтах ... на самом деле использование значения с плавающей запятой для значения memset не имеет никакого смысла!
Формат с плавающей запятой имеет только 23 + 1 бит для мантиссы и 8 бит для экспоненты. Когда вы записываете необработанные байтовые значения (используя memset) внутри плавающей запятой, вы не знаете, что получаете, потому что вы устанавливаете значения, которые будут быть интерпретированным по-другому!
В вашем фрагменте вы также приводите его к (int), превращая 4-байтовое число с плавающей запятой, содержащее 10,0f, в 4-байтовое целое число, содержащее значение 10 ... но, как уже было сказано, если вы устанавливаете значение с плавающей запятой с 10 (= 0x0a) в итоге вы получите 0x0A0A0A0A, который не равен 10.0f в формате с плавающей запятой, это может быть любое значение (также очень близкое к 0, как в вашем случае).
На самом деле memset
полезно, когда вы хотите инициализировать массив символов (поскольку вы эффективно получаете это значение для каждого символа, потому что они имеют длину 1 байт) или когда вы хотите установить все в 0 (NULL), который работает для всех основных типов данных ..