C分配动态双精度数组并使用memset对其进行初始化
C allocating dynamic array of doubles and initializing it with memset
我知道这个问题很基础,但即使在网上搜索了很长时间,我也找不到解决问题的方法。我想熟悉 C 中的动态数组,特别是使用 malloc() 的分配和使用 memset() 的初始化,所以这里是我的代码:
#include <stdlib.h>
int main()
{
double *d;
int numElements = 3;
size_t size = numElements * sizeof(double);
d = malloc(size);
memset(d,1.0,size);
int i;
for(i=0; i < numElements; i++)
printf("%f\n",d[i]);
return 0;
}
但我得到的输出与我期望的不同
0.0
0.0
0.0
拜托,有人可以这么温柔地解释我做错了什么吗?
谢谢!
因为 memset 使用字节
sizeof(双)==8,
所以数组中的每个双精度值都填充了值 0x0101010101010101
只需将 memset 替换为:
for (int i=0;i< numElements;i++) d[i]=1;
我知道这个问题很基础,但即使在网上搜索了很长时间,我也找不到解决问题的方法。我想熟悉 C 中的动态数组,特别是使用 malloc() 的分配和使用 memset() 的初始化,所以这里是我的代码:
#include <stdlib.h>
int main()
{
double *d;
int numElements = 3;
size_t size = numElements * sizeof(double);
d = malloc(size);
memset(d,1.0,size);
int i;
for(i=0; i < numElements; i++)
printf("%f\n",d[i]);
return 0;
}
但我得到的输出与我期望的不同
0.0
0.0
0.0
拜托,有人可以这么温柔地解释我做错了什么吗?
谢谢!
因为 memset 使用字节
sizeof(双)==8, 所以数组中的每个双精度值都填充了值 0x0101010101010101
只需将 memset 替换为:
for (int i=0;i< numElements;i++) d[i]=1;