C分配动态双精度数组并用memset初始化它

时间:2016-03-10 15:35:54

标签: c arrays malloc 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

拜托,有人可以这么温和地向我解释我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

因为memset使用字节

的sizeof(双)== 8, 所以你的数组中的每个double都填充了值0x0101010101010101

只需用以下内容替换memset:

for (int i=0;i< numElements;i++) d[i]=1;