C 中的 memset() 未初始化为 const double;

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 的结果仅为每个元素 returns 0.0000 而不是存储在 C 中的值..

有人可以帮忙吗?

void *memset(void *s, int c, size_t n);

memset 接受一个 int 或常量字节来填充内存。

您提供的价值是double。那么memset将如何处理呢?

The value provided by you will be implicitly casted to int and then the casted value will again be casted to unsigned char to get a byte value.

还有,memset的size_t参数是字节数。您应该使用 10 * sizeof(double) 而不是 10.

memset 用给定的字节值初始化一块内存。字节是 unsigned char,比 double 小得多,后者在您的体系结构中使用 8 个字节。除非 doubleC 的所有字节都相同,否则 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 是编译时常量时。