Инициализация массива плавающего с memset

Статическое связывание включает файлы, которые нужны программе, в одном исполняемом файле.

Динамическое связывание - это то, что вы считаете обычным: оно создает исполняемый файл, для которого все еще требуются библиотеки DLL и т. Д., Которые находятся в одном каталоге (или библиотеки DLL могут находиться в системной папке).

(DLL = динамическая ссылка библиотека)

Динамически связанные исполняемые файлы компилируются быстрее и не так ресурсоемки.

10
задан Antti Haapala 13 May 2019 в 18:35
поделиться

5 ответов

Casting a double to an int just creates the binary number 00001010 (10 in binary), and that is the value that is memset'ed. Since it's a char, each of your floats is actually receiving the bit pattern 00001010 00001010 00001010 00001010.

10
ответ дан 3 December 2019 в 13:51
поделиться

Memset принимает int, но преобразует его в беззнаковый char, а затем заполняет каждый байт числа с плавающей запятой (sizeof (float), вероятно, равен 4) этим битовым шаблоном. Если это C ++, предпочтительнее fill :

#include <algorithm>
using namespace std;

//...

fill (arry,arry+3,10.0);
15
ответ дан 3 December 2019 в 13:51
поделиться

На самом деле ваша попытка немного вводит в заблуждение, memset работает с байтами ... на самом деле использование float для значения memset не имеет никакого смысла!

Формат с плавающей запятой имеет только 23 + 1 бит для мантиссы и 8 бит для экспоненты ... когда вы записываете необработанные байтовые значения (с использованием memset) внутри float, вы не знаете, что получаете, потому что вы устанавливаете значения, которые будут интерпретироваться по-другому!

В вашем фрагменте вы также приводите его к (int), превращая 4-байтовое число с плавающей запятой, содержащее 10.0f, в 4-байтовое целое число, содержащее значение 10 .. но, как было сказано ранее, если вы memset a float с 10 (= 0x0a) вы получите 0x0A0A0A0A, который не равен 10.0f в формате с плавающей запятой, это может быть любое значение (также что-то очень близкое к 0, как в вашем случае).

3
ответ дан 3 December 2019 в 13:51
поделиться

Нет. memset берет один байт и записывает его в массив. Float - это многобайтовый тип.

EDIT: Да, я знаю, что memset принимает int. Но для заполнения используется только символ без знака (один байт).

8
ответ дан 3 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: