使用C中的int值初始化一个double数组

时间:2017-12-30 10:37:44

标签: c arrays

我现在正在学习一些c,并且必须为大学做一些练习。我需要一个双数组,应该填充int值。所以我就是这个。

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] ) {

int size=0, i=0;

printf("Enter size of array: ");
scanf("%d", &size);

double* field = malloc(size * sizeof(double));
double value;

for(i=0; i<size; i++) {
    field[i] = i;;
}

for(i=0; i<size; i++) {
    printf("Field%i: %d\n",i, field[i]);
}

free(field);

return 0;

}

但是,当我执行它时,所有值都设置为0。

Enter size of array: 10
Field0: 0
Field1: 0
Field2: 0
Field3: 0
Field4: 0
Field5: 0
Field6: 0
Field7: 0
Field8: 0
Field9: 0

2 个答案:

答案 0 :(得分:6)

printf&#39; s %d代表十进制整数,而不是 double

所以这一行:

printf("Field%i: %d\n",i, field[i]);

应该是:

printf("Field%i: %f\n",i, field[i]);

使用错误的格式说明符是您之前使用的 undefined behavior

来自standard

  

如果任何参数不是相应的正确类型   转换规范,行为未定义。

同时检查malloc的返回值。它让您知道分配是否失败(返回NULL)。

<子>  更多来自David C. Rankin的评论

  

%d格式   说明符在内存中查找4 - 字节(sizeof int字节)   根据您的机器的endianess排序。当你提供了   8字节(sizeof double)值由符号位组成,标准化   指数和尾数,它不知道如何处理它。   

printf这里,我们可以使用%f代替%lf,这也增加了与C99之前版本的兼容性,而且它更短。 (chux指出这一点)。

答案 1 :(得分:-1)

我不认为malloc函数是否为数组分配了内存。检查malloc的语法以及返回类型。