Статическое связывание включает файлы, которые нужны программе, в одном исполняемом файле.
Динамическое связывание - это то, что вы считаете обычным: оно создает исполняемый файл, для которого все еще требуются библиотеки DLL и т. Д., Которые находятся в одном каталоге (или библиотеки DLL могут находиться в системной папке).
(DLL = динамическая ссылка библиотека)
Динамически связанные исполняемые файлы компилируются быстрее и не так ресурсоемки.
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.
Memset принимает int, но преобразует его в беззнаковый char, а затем заполняет каждый байт числа с плавающей запятой (sizeof (float), вероятно, равен 4) этим битовым шаблоном. Если это C ++, предпочтительнее fill :
#include <algorithm>
using namespace std;
//...
fill (arry,arry+3,10.0);
На самом деле ваша попытка немного вводит в заблуждение, memset работает с байтами ... на самом деле использование float для значения memset не имеет никакого смысла!
Формат с плавающей запятой имеет только 23 + 1 бит для мантиссы и 8 бит для экспоненты ... когда вы записываете необработанные байтовые значения (с использованием memset) внутри float, вы не знаете, что получаете, потому что вы устанавливаете значения, которые будут интерпретироваться по-другому!
В вашем фрагменте вы также приводите его к (int), превращая 4-байтовое число с плавающей запятой, содержащее 10.0f, в 4-байтовое целое число, содержащее значение 10 .. но, как было сказано ранее, если вы memset a float с 10 (= 0x0a) вы получите 0x0A0A0A0A, который не равен 10.0f в формате с плавающей запятой, это может быть любое значение (также что-то очень близкое к 0, как в вашем случае).
Нет. memset берет один байт и записывает его в массив. Float - это многобайтовый тип.
EDIT: Да, я знаю, что memset принимает int. Но для заполнения используется только символ без знака (один байт).