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 个字节。除非 double
值 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 是编译时常量时。
您好,我有以下用 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 个字节。除非 double
值 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 是编译时常量时。