[英]memset() in C not initialising to a const double;
嗨,我有以下用C语言为x86编写的代码,
const double N = 4;
const double C = 1.0 / N; <---- 0.2500
double *array = (double*)calloc(10, sizeof(double));
memset(array, C, 10);
memset的结果只为每个元素返回0.0000,而不是存储在C中的值。
谁能帮忙吗?
memset
用给定的字节值初始化一个内存块。 字节是unsigned char
,比在体系结构中使用8个字节的double
单位小得多。 除非double
memset
值C
所有字节都相同,否则无法使用memset
初始化double
值数组。 在符合IEEE-754的系统(例如各种x86变体)上,+ +0.0
所有字节的位均为0
,因此您可以使用memset(array[i], 0, 10 * sizeof(double))
将数组初始化为0.0
,但这既不可读也不便携。 对于大多数其他值,根本不可能。
您必须使用一个简单的for
循环:
for (int i = 0; i < 10; i++)
array[i] = C;
该循环将由编译器优化,特别是如果C是编译时间常数。
void *memset(void *s, int c, size_t n);
memset接受一个int或一个常量字节来填充内存。
您提供的值是double
。 那么memset
将如何处理呢?
您提供的值将隐式转换为int,然后将转换值再次转换为unsigned char以获取字节值 。
同样,memset的size_t参数是字节数。 您应该使用10 * sizeof(double)
而不是10
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.