инициализировать массив типа float, используя memset - PullRequest
0 голосов
/ 27 июня 2018

У меня есть указатель float *ptr, после динамического выделения с длиной n я хочу инициализировать этот массив нулем или единицей, поэтому я использую memset(ptr,0,n*sizeof(float)) или memset(ptr,1,n*sizeof(float)). Это законно? Поскольку второй аргумент memset имеет тип int, боюсь, его нельзя применить к типу с плавающей точкой.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

MemSet (PTR, 1, п * SizeOf (с плавающей точкой)). Это законно?

Нет, не устанавливать значение float в 1.0f в качестве кодировки float в байтах 1,1,1,1 @ James Picone


memset(ptr,0,n*sizeof(float)) или лучше memset(ptr, 0, sizeof *ptr * n) будет устанавливать каждый байт в 0. Это, безусловно, кодировка для float 0.0f.

Чтобы установить для каждого элемента массива float значение 1.0f или любое другое значение, просто используйте цикл.

float init_value = 1.0f;
for (size_t i = 0; i < n; n++) {
   ptr[i] = init_value;
}
0 голосов
/ 27 июня 2018

Инициализация значений с плавающей запятой равной нулю в байтах - все в порядке (будет получено значение с плавающей запятой 0.0). Но all-bytes-1 не является разумным, потому что он будет выдавать «мусорное» значение (но каждый раз одно и то же).

...